SQL分组查询问题:ORG-4按Unit子串分组其余按Organization分组
问题解决:按条件分组统计记录数
问题分析
你当前的GROUP BY子句同时使用了agency和substring(unit,1,3),这会导致非"ORG-4"的记录也被substring(unit,1,3)拆分分组,不符合需求。正确的做法是让GROUP BY的逻辑和SELECT里的CASE表达式完全一致——直接按CASE的结果分组。
修正后的SQL语句
SELECT CASE WHEN agency = 'ORG-4' THEN substring(unit, 1, 3) ELSE agency END AS agency1, count(*) AS count FROM km_agency GROUP BY CASE WHEN agency = 'ORG-4' THEN substring(unit, 1, 3) ELSE agency END;
如果你的数据库支持按列别名分组(比如MySQL 8.0+、PostgreSQL等),可以简化成:
SELECT CASE WHEN agency = 'ORG-4' THEN substring(unit, 1, 3) ELSE agency END AS agency1, count(*) AS count FROM km_agency GROUP BY agency1;
结果说明
修正后的语句会:
- 对
agency为"ORG-1"、"ORG-2"、"ORG-3"的记录,直接按原agency值分组统计总数 - 对
agency为"ORG-4"的记录,按unit字段的前3个字符分组统计数量
最终得到的结果与你期望一致:
| Agency1 | count |
|---|---|
| ORG-1 | 21 |
| ORG-2 | 16 |
| ORG-3 | 85 |
| NOR | 8 |
| SOU | 6 |
内容的提问来源于stack exchange,提问作者Likemike90
相关产品推荐
相关产品推荐

