如何在SQL的GROUP BY中合并特定类型并汇总统计数量
如何在SQL中实现自定义分组统计?
现有一张名为transport的表,结构及数据如下:
id | type ---+------ 1 | plane 2 | plane 3 | ferry 4 | ferry 5 | car 6 | car 7 | bus 8 | train
执行常规分组统计语句:
select type, count(*) from transport group by type;
得到结果:
type | count ------+------ plane | 2 ferry | 2 car | 2 bus | 1 train | 1
需求是将car、bus、train归为一类(显示为car)并汇总数量,最终得到如下结果:
type | count -------+------ plane | 2 ferry | 2 car | 4
当然可以直接在SQL中实现该需求,无需在应用层做求和处理。核心思路是用自定义分组规则替换原type字段后再分组统计,推荐使用标准SQL的CASE WHEN语句来实现,兼容性最好:
SELECT CASE WHEN type IN ('car', 'bus', 'train') THEN 'car' ELSE type END AS type, COUNT(*) AS count FROM transport GROUP BY CASE WHEN type IN ('car', 'bus', 'train') THEN 'car' ELSE type END;
如果你的数据库支持在GROUP BY中使用查询字段的别名(比如PostgreSQL、MySQL 8.0+、SQL Server等),可以简化成:
SELECT CASE WHEN type IN ('car', 'bus', 'train') THEN 'car' ELSE type END AS type, COUNT(*) AS count FROM transport GROUP BY type;
部分数据库(如MySQL)还支持更简洁的IF函数写法:
SELECT IF(type IN ('car', 'bus', 'train'), 'car', type) AS type, COUNT(*) AS count FROM transport GROUP BY type;
以上语句执行后都能得到你需要的分组统计结果。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

