如何将多条SELECT语句结果合并为单表多列输出?
解决方法
1. 将多个查询结果合并为不同列
UNION是用来合并行数据的,要得到不同列的结果,你可以把每个查询作为主SELECT中的一个字段(子查询),这样就能一次性输出5个列:
SELECT (SELECT ROUND(avg("TotalPay"), 2) FROM sf_fire) AS "($)Fire Department Average Pay", (SELECT ROUND(avg("TotalPay"), 2) FROM sf_medicine) AS "($)Medicine Department Average Pay", (SELECT ROUND(avg("TotalPay"), 2) FROM sfs_police) AS "($)Police Department Average Pay", (SELECT ROUND(avg("TotalPay"), 2) FROM sfs_notdep) AS "($)Not dep Department Average Pay", (SELECT ROUND(avg("TotalPay"), 2) FROM sfs_other) AS "($)Other Department Average Pay";
注意:你原来的代码里先把avg("TotalPay")转成int再ROUND是多余的——转int会直接丢掉小数部分,比如平均值是15000.78,转int后变成15000,再ROUND到2位还是15000.00,丢失了精度,直接对avg结果ROUND即可。
2. 替代ROUND的小数处理方法
除了ROUND,还有几种常用的方式处理小数位数:
CAST指定精度:直接将平均值转换为固定精度的数值类型,自动四舍五入到指定小数位:
CAST(avg("TotalPay") AS NUMERIC(10, 2))这里
NUMERIC(10,2)表示总位数10,小数位2,适合存储金额类数据。TRUNC截断小数:如果不需要四舍五入,只想保留2位小数并截断后面的部分,可以用TRUNC:
TRUNC(avg("TotalPay"), 2)比如平均值是15000.789,TRUNC后会变成15000.78。
TO_CHAR格式化输出:如果需要将结果格式化为字符串(比如带固定小数位的显示格式),可以用TO_CHAR:
TO_CHAR(avg("TotalPay"), 'FM9999999.00')这个会自动四舍五入到2位小数,并且去掉多余的前导空格,输出类似
15000.78的字符串。
内容的提问来源于stack exchange,提问作者Tarun Katneni
相关产品推荐
相关产品推荐

