能否用GROUP BY实现分组统计并合并同计数的状态值?
实现方法解析
没问题,这个统计需求完全可以通过GROUP BY结合条件判断来实现,而且方法还挺灵活的!核心思路是把需要合并的state值映射到同一个分组,再按新分组统计数量。
通用SQL方案(适配绝大多数数据库)
用CASE WHEN语句将b和c统一归为b,c分组,其他state保持原值,之后按这个新分组聚合统计:
SELECT CASE WHEN state IN ('b', 'c') THEN 'b,c' ELSE state END AS state, COUNT(*) AS `count(*)` FROM a GROUP BY state;
代码说明:
CASE WHEN负责定义分组规则:只要state是b或c,就合并到b,c分组,其他state单独成组;GROUP BY state这里的state是我们通过CASE生成的别名,会按照新的分组规则聚合数据;COUNT(*)统计每个分组的记录数,输出结果完全匹配你期望的格式。
简化版(部分数据库支持)
如果你的数据库支持IF函数比如MySQL,可以把代码简化成更简洁的版本:
SELECT IF(state IN ('b', 'c'), 'b,c', state) AS state, COUNT(*) AS `count(*)` FROM a GROUP BY state;
结果验证
用你提供的测试数据运行上述SQL,会得到完全符合预期的统计结果:
| state | count(*) |
|---|---|
| a | 2 |
| b,c | 2 |
| d | 1 |
这种方法的优势是扩展性很强,如果后续需要合并其他state值,只需要修改IN里的条件或者新增CASE WHEN分支就行。
内容的提问来源于stack exchange,提问作者liuxingpuuu
相关产品推荐
相关产品推荐

