You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多条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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:01:23