SQL如何按指定值对行分组 手动合并指定分类并求和Value字段
SQL实现自定义合并分类后分组聚合
场景说明
- 待处理表包含
Name、Value两个字段 - 原始数据对应关系:
- German → Value=4
- French → Value=1
- FrenchSecond → Value=1
- English → Value=2
- 预期效果:将
FrenchSecond手动合并入French分类,按合并后的分类维度对Value求和,最终输出统计结果:German=4、French=2、English=2
实现方案
核心逻辑是用CASE WHEN表达式先对原始Name字段做自定义值映射,把需要合并的枚举值统一映射为目标分类名,再基于映射后的分类字段做SUM聚合即可,以下是兼容绝大多数SQL方言的写法:
SELECT -- 自定义分类映射规则 CASE WHEN Name = 'FrenchSecond' THEN 'French' ELSE Name END AS merged_category, SUM(Value) AS sum_value FROM your_actual_table -- 替换为实际使用的表名 GROUP BY -- 和SELECT里的映射规则保持一致,保证全SQL环境兼容 CASE WHEN Name = 'FrenchSecond' THEN 'French' ELSE Name END;
如果你使用的数据库支持在
GROUP BY中引用SELECT阶段定义的别名(如MySQL、高版本PostgreSQL),可以把GROUP BY部分简化为GROUP BY merged_category,减少重复代码。
扩展说明
如果后续有更多需要合并的分类,只需要在CASE WHEN块中新增判断分支即可,例如需要把US、USA都合并为United States分类,直接加一行WHEN Name IN ('US', 'USA') THEN 'United States'就能实现。
内容的提问来源于stack exchange,提问作者TesterOfD
相关产品推荐
相关产品推荐

