如何编写SQL语句将多Status值合并为两组进行分组统计?
嘿,这个需求用CASE WHEN就能轻松实现,我给你两种实用的写法,适配不同的SQL场景:
方法一:通用兼容版(适配所有主流SQL数据库)
这是兼容性拉满的写法,不管你用MySQL、PostgreSQL、SQL Server还是Oracle都能正常运行:
SELECT CASE WHEN Status IN ('a', 'b', 'd') THEN 'I' WHEN Status IN ('e', 'f') THEN 'II' ELSE '其他' -- 可选,用来处理意料之外的状态值 END AS status, COUNT(client) AS Count FROM 你的表名 -- 记得替换成你实际的数据表名称 GROUP BY CASE WHEN Status IN ('a', 'b', 'd') THEN 'I' WHEN Status IN ('e', 'f') THEN 'II' ELSE '其他' END;
如果能确定数据表中只有a/b/d/e/f这几种状态,ELSE部分可以直接省略,让代码更简洁。
方法二:简化版(支持别名分组的数据库)
像MySQL、PostgreSQL这类允许在GROUP BY中使用SELECT列表别名的数据库,可以简化成下面的写法,看起来更清爽:
SELECT CASE WHEN Status IN ('a', 'b', 'd') THEN 'I' ELSE 'II' -- 确认无其他状态时可用 END AS status, COUNT(*) AS Count FROM 你的表名 GROUP BY status;
执行前记得把代码里的你的表名替换成你实际的表名,就能得到你想要的分组统计结果啦~
内容的提问来源于stack exchange,提问作者Kristy Yu
相关产品推荐
相关产品推荐

