sql 中小数列的舍入和

Round sum of decimal columns in sql

我将此代码用于 sum/addition 并将数据库 AMOUNT 和 RATE 的两个值相乘。

SELECT YEAR, COST, RATE, SUM(AMOUNT) AS ONE, ROUND(SUM(AMOUNT*RATE/100),0) AS COST 
FROM DATABASE 
WHERE YEAR='$YEAR'

但是圆形值不起作用

650 x 5 / 100 = 32  instead of 33
720 x 8 / 100 = 57  instead of 58

COST 总数将从 91 变为 89,因为我需要总的回合价值

您目前对总和进行四舍五入,而不是对被加数进行四舍五入。舍入被加数。 (并且使用 ceil() 而不是 round(),如果你总是想要最小的大于或等于整数,而不是“真正的”舍入。)

SELECT year,
       cost,
       rate,
       sum(amount) one,
       sum(round(amount * rate / 100, 0)) cost 
       FROM `database`
       WHERE year = ?
       GROUP BY year,
                cost,
                rate;

一些注意事项:

  • 您的查询一般来说格式不正确。所选列列表中的某些列既不在 GROUP BY 子句中,也不在聚合函数的参数中。可悲的是,旧 MySQL 版本或配置不当的版本会接受此类错误查询。但结果突然变得好笑了。
  • 不要使用字符串插值或连接将值获取到 SQL 查询中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数化查询。参见 "How to include a PHP variable inside a MySQL statement" and "How can I prevent SQL injection in PHP?"
  • database 真是个糟糕的 table 名字。