SQL中如何将UNION联合查询的结果拆分至不同独立列展示
实现方案
你原来使用UNION是纵向拼接结果集,所以返回多行单列结果,要得到单行多列的统计结果,可使用以下两种写法,优先推荐第一种条件聚合写法,仅需扫描一次表,性能更高。
写法1:条件聚合(推荐)
SELECT COUNT(CASE WHEN column2 > 10 THEN 1 END) AS Column1, COUNT(CASE WHEN column3 > 10 THEN 1 END) AS Column2, COUNT(CASE WHEN column3 > 10 THEN 1 END) AS Column3 -- 若第三个统计的判断条件不同,修改此处即可 FROM `table`
如果你的数据库支持IF函数(如MySQL、PostgreSQL 12+等),可以简化为更短的写法:
SELECT COUNT(IF(column2 > 10, 1, NULL)) AS Column1, COUNT(IF(column3 > 10, 1, NULL)) AS Column2, COUNT(IF(column3 > 10, 1, NULL)) AS Column3 FROM `table`
写法2:子查询拼接
如果你的统计逻辑来自不同表,或者需要兼容更老旧的SQL方言,可以用子查询分别统计每个值作为单独列返回:
SELECT (SELECT COUNT(*) FROM `table` WHERE column2 > 10) AS Column1, (SELECT COUNT(*) FROM `table` WHERE column3 > 10) AS Column2, (SELECT COUNT(*) FROM `table` WHERE column3 > 10) AS Column3
内容的提问来源于stack exchange,提问作者yolo
相关产品推荐
相关产品推荐

