SQL使用round计算百分比时如何消除小数位输出整数
问题原因
你之前修改round参数的逻辑顺序出错了:
原计算逻辑是 (比例计算 → 保留2位小数) × 100,得到的是 xx.00 格式的结果。如果直接把round的第二个参数改为0,逻辑就变成(比例计算 → 保留0位小数) × 100,例如0.5的比例保留0位小数会直接进位为1,乘以100后自然得到100,这就是所有结果都变成100的原因。
解决方案
调整计算顺序,先把比例乘以100之后再做精度处理即可,以下是两种常用写法:
写法1:调整round的作用位置(支持四舍五入取整)
SELECT ds, round( count(CASE WHEN action = 'accepted' THEN 1 ELSE NULL END) * 100.0 / count(action), 0 ) as perc FROM friend_requests GROUP BY 1
写法2:直接转整数类型(默认截断小数部分,不需要四舍五入时用)
不同数据库的整数类型声明略有差异,通用逻辑参考如下:
SELECT ds, CAST( count(CASE WHEN action = 'accepted' THEN 1 ELSE NULL END) * 100.0 / count(action) AS UNSIGNED -- PostgreSQL替换为INT,Oracle替换为INTEGER即可 ) as perc FROM friend_requests GROUP BY 1
内容的提问来源于stack exchange,提问作者Chris90
相关产品推荐
相关产品推荐

