sql中的sum怎么去小数点
除了常见的
CAST、ROUND、FLOOR、CEIL等函数,SQL 中还有一些方法可以用来处理SUM结果中的小数点,根据不同的需求实现去小数点的效果:
1. 使用 TRUNCATE 函数(MySQL 特有)
TRUNCATE 函数可以将数值截断到指定的小数位数,如果指定为 0 位小数,就可以去掉小数点部分:
SELECT TRUNCATE(SUM(column_name), 0) AS sum_without_decimal
FROM table_name;
区别:TRUNCATE 是直接去掉小数部分,而不进行四舍五入。
2. 使用整数运算
将数值强制转换为整数类型,也可以通过简单的数学运算去掉小数部分:
方法 1:通过除法与整数运算
SELECT (SUM(column_name) DIV 1) AS sum_without_decimal
FROM table_name;
方法 2:通过 MOD 操作
移除小数部分的效果:
SELECT SUM(column_name) - (SUM(column_name) MOD 1) AS sum_without_decimal
FROM table_name;
3. 结合字符串处理函数
将数值转为字符串后移除小数部分,适合某些支持字符串处理的数据库:
SELECT CAST(SUBSTRING_INDEX(SUM(column_name), '.', 1) AS UNSIGNED) AS sum_without_decimal
FROM table_name;
此方法会将小数点前的部分截取下来,再转换为整数。
4. 使用格式化函数
一些数据库提供格式化函数,可以通过格式化实现去掉小数:
MySQL 的 FORMAT 函数
SELECT FORMAT(SUM(column_name), 0) AS sum_without_decimal
FROM table_name;
注意:FORMAT 返回的是字符串结果,如果需要整数类型,可以结合 CAST。
PostgreSQL 的 TO_CHAR 函数
SELECT TO_CHAR(SUM(column_name), '999999') AS sum_without_decimal
FROM table_name;
5. 带条件的合计
有时你可能需要在 SUM 前对数据进行筛选或处理。例如:
去除小数点前后再求和:
SELECT SUM(FLOOR(column_name)) AS sum_without_decimal
FROM table_name;
按特定条件统计后再去小数:
SELECT CAST(SUM(CASE WHEN column_name > 0 THEN column_name ELSE 0 END) AS INT) AS sum_without_decimal
FROM table_name;
示例比较
假设表 transactions 的数据如下:
| id | amount |
|---|---|
| 1 | 10.75 |
| 2 | 20.40 |
| 3 | -5.90 |
- 使用
ROUND:
SELECT ROUND(SUM(amount), 0) AS sum_without_decimal FROM transactions;
结果:25(四舍五入到整数)
- 使用
CAST:
SELECT CAST(SUM(amount) AS INT) AS sum_without_decimal FROM transactions;
结果:24(直接去掉小数)
- 使用
FLOOR:
SELECT FLOOR(SUM(amount)) AS sum_without_decimal FROM transactions;
结果:24(向下取整)
- 使用
CEIL:
SELECT CEIL(SUM(amount)) AS sum_without_decimal FROM transactions;
结果:25(向上取整)
总结
根据具体需求选择合适的方法:
- 四舍五入:
ROUND - 直接截断:
CAST或TRUNCATE - 向下取整:
FLOOR - 向上取整:
CEIL - 字符串操作:
SUBSTRING_INDEX或TO_CHAR
每种方法的结果可能会略有差异,因此需结合实际应用场景使用。