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

SQL多条件计数转新列 如何将不同flag的统计行合并为单行结果

实现方案

你要的效果是典型的行转列统计,用条件聚合就能实现,不需要按table2.FLAG分组,直接针对三个不同的flag取值分别做计数即可:

SELECT 
    table1.ID,
    table1.FLAG,
    COUNT(CASE WHEN table2.FLAG = 'Active' THEN 1 END) AS Active_Count,
    COUNT(CASE WHEN table2.FLAG = 'Suspend' THEN 1 END) AS Suspend_Count,
    COUNT(CASE WHEN table2.FLAG = 'Other' THEN 1 END) AS Other_Count
FROM table1
INNER JOIN table2 ON table1.ID = table2.ID
WHERE table1.ID = 123
GROUP BY table1.ID, table1.FLAG;

说明

  • 这里把原来的隐式连接改成了更规范的显式INNER JOIN,逻辑和你原来的写法完全一致,可读性更强
  • 每个CASE WHEN只会匹配对应table2.FLAG取值的行,不匹配的会返回NULL,而COUNT会忽略NULL值,刚好能得到对应分类的统计数
  • 分组字段只需要保留table1.ID和table1.FLAG,最终只会返回1行符合条件的结果

如果你的数据库支持IF函数(比如MySQL),还可以写成更简化的版本:

SELECT 
    table1.ID,
    table1.FLAG,
    SUM(IF(table2.FLAG = 'Active', 1, 0)) AS Active_Count,
    SUM(IF(table2.FLAG = 'Suspend', 1, 0)) AS Suspend_Count,
    SUM(IF(table2.FLAG = 'Other', 1, 0)) AS Other_Count
FROM table1
INNER JOIN table2 ON table1.ID = table2.ID
WHERE table1.ID = 123
GROUP BY table1.ID, table1.FLAG;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:57:02