PSQL如何对breed字段自定义分类后聚合统计各类别count值
SQL查询调整方案
你原有SQL的核心问题是没有先对breed字段做自定义分类映射,且查询了无关字段、分组规则不符合需求,调整后的查询语句如下:
SELECT CASE WHEN breed IN ('Persian', 'Asian') THEN 'Cats' WHEN breed IN ('Labrador', 'Huskey', 'Golden Retriever') THEN 'Dogs' END AS breed, COUNT(*) AS count FROM animals GROUP BY CASE WHEN breed IN ('Persian', 'Asian') THEN 'Cats' WHEN breed IN ('Labrador', 'Huskey', 'Golden Retriever') THEN 'Dogs' END
如果使用的数据库支持SELECT别名在GROUP BY中直接引用(比如MySQL、PostgreSQL 12及以上版本),可以简化写法:
SELECT CASE WHEN breed IN ('Persian', 'Asian') THEN 'Cats' ELSE 'Dogs' END AS breed, COUNT(*) AS count FROM animals GROUP BY breed
调整说明
- 删除了原有查询中无关的
name、stage字段,避免分组不匹配报错 - 通过
CASE WHEN语句实现了breed到自定义分类的映射,直接输出Cats/Dogs分类值 - 分组规则调整为按映射后的新分类字段分组,即可统计得到每个分类的总记录数
内容的提问来源于stack exchange,提问作者The Dan
相关产品推荐
相关产品推荐

