Postgres按列GROUP BY时如何将特定值归类为'other'类别
Postgres 合并特定分组的实现方法
你可以通过 CASE 条件表达式先对 type 字段做值映射,将需要合并的 small、medium、large 统一替换为 other 后,再基于映射后的字段做分组聚合,示例SQL如下:
SELECT SUM(price) AS sum, CASE WHEN type IN ('small', 'medium', 'large') THEN 'other' ELSE type END AS type FROM sales GROUP BY CASE WHEN type IN ('small', 'medium', 'large') THEN 'other' ELSE type END;
Postgres 9.1及以上版本支持直接按SELECT列表中的字段别名分组,因此可以简化为如下写法,执行效果完全一致:
SELECT SUM(price) AS sum, CASE WHEN type IN ('small', 'medium', 'large') THEN 'other' ELSE type END AS type FROM sales GROUP BY type;
如果担心别名和原表type字段重名产生歧义,也可以将分组后的字段重命名为其他名称:
SELECT SUM(price) AS sum, CASE WHEN type IN ('small', 'medium', 'large') THEN 'other' ELSE type END AS group_type FROM sales GROUP BY group_type;
执行上述SQL后即可得到你需要的统计结果:
| sum | type |
|---|---|
| 2 | basic |
| 2 | premium |
| 10 | other |
内容的提问来源于stack exchange,提问作者Mcscrag
相关产品推荐
相关产品推荐

