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 名字。
我将此代码用于 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 名字。