PostgreSQL AVG函数返回末尾零的原因与控制方法
AVG函数返回带多位小数的原因及控制方法
原因分析
SQL里的AVG()函数和MAX()/MIN()的处理逻辑存在差异:
AVG()用于计算平均值,为了避免出现小数结果时丢失精度,数据库会自动为结果分配更多小数位数——哪怕所有参与计算的数据都是整数,它也会预留足够的小数位,来兼容可能出现的非整数平均结果。- 而
MAX()和MIN()只是从原字段中提取极值,不会改变原字段的类型和格式,因此返回和原始数据一致的123。
控制输出的方法
你可以通过以下几种方式调整AVG()的返回结果:
- 强制转换为整数类型:用
CAST()直接去掉小数部分:SELECT CAST(avg(value) AS INTEGER) FROM demo; - 四舍五入到整数:用
ROUND()函数指定保留0位小数:SELECT ROUND(avg(value), 0) FROM demo; - 直接截断小数位:如果不需要四舍五入,用
TRUNC()(部分数据库如MySQL使用TRUNCATE())截断小数部分:SELECT TRUNC(avg(value), 0) FROM demo;
内容的提问来源于stack exchange,提问作者TheSQLGoat
相关产品推荐
相关产品推荐

