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

如何将多组子查询单统计SQL合并为单查询多列统计?

解决方法:用条件聚合合并多查询为单行多列结果

嘿,这个需求太常见了!你可以用条件聚合的方式,把多个仅SOURCE_ID不同的统计查询合并成一个,直接输出每行对应一个统计值的结果。

最终SQL示例

假设你需要统计SOURCE_ID为1、2、3的情况,代码如下:

SELECT
  COUNT(CASE WHEN s1.SOURCE_ID = 1 THEN 1 END) AS source_1_count,
  COUNT(CASE WHEN s1.SOURCE_ID = 2 THEN 1 END) AS source_2_count,
  COUNT(CASE WHEN s1.SOURCE_ID = 3 THEN 1 END) AS source_3_count
  -- 继续添加更多CASE WHEN行,覆盖你需要的所有SOURCE_ID取值
FROM (
  SELECT * 
  FROM TABLE1 t 
  JOIN TABLE2 e USING (EVENT_ID)
) s1;

逻辑解释

  • 核心是COUNT(CASE WHEN ... THEN 1 END):当s1.SOURCE_ID匹配目标值时返回1,否则返回NULL;而COUNT函数会自动忽略NULL,刚好统计出对应ID的有效记录数。
  • 如果你习惯用SUM,也可以写成SUM(CASE WHEN s1.SOURCE_ID = 1 THEN 1 ELSE 0 END),效果完全一致。
  • 如果子查询里存在重复记录,需要统计唯一值的话,改成COUNT(DISTINCT CASE WHEN ... THEN s1.EVENT_ID END)即可(替换EVENT_ID为你需要去重的字段)。

扩展提示

如果你的SOURCE_ID取值非常多,手动写CASE WHEN太麻烦,可以考虑动态生成SQL(比如用存储过程或者脚本拼接),但如果是固定的几个值,上面的静态写法最简单高效。

内容的提问来源于stack exchange,提问作者AJwr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:46:15