如何在SQL中对数据表重复记录按分组求和并去重
SQL 去重聚合解决方案
修正后查询语句
你原有SQL中的CASE表达式存在逻辑错误:当前写法是字符串常量与数字比较,永远不会返回匹配结果,需要替换为你实际的业务判断逻辑,以下是符合需求的完整语句:
SELECT Country, SUM(Price) AS total_price, CASE -- 请将下方risk_type替换为你实际用于判断风险类型的字段名 WHEN risk_type = 'Credit' THEN 'Credit Risk' WHEN risk_type = 'Equities' THEN 'Eq Risk' END AS Model FROM finance -- 过滤掉瑞士CDR_CCF=1的记录,后续单独处理 WHERE NOT (Country = 'CH' AND CDR_CCF = 1) GROUP BY Country, Model UNION ALL -- 单独处理瑞士地区CDR_CCF=1时仅返回一条的要求 SELECT 'CH' AS Country, SUM(Price) AS total_price, -- 可根据业务需求修改此处Model的固定取值 'Combined Risk' AS Model FROM finance WHERE Country = 'CH' AND CDR_CCF = 1
逻辑说明
- 核心通过
GROUP BY Country, Model实现按「国家+风险类型」分组,每组仅返回一条记录,SUM(Price)用于计算分组内所有Price字段的总和 - 若你需要保留原查询中的
OB字段,需明确分组内OB的取值规则,比如取分组内第一个OB值可写为MIN(OB) AS OB,并将该字段加入GROUP BY列表 - 瑞士地区的特殊需求通过
UNION ALL实现:当CDR_CCF取值为1时,瑞士所有记录合并为一条返回,你可以根据业务需要调整该条记录的Model字段取值
参考示意图

内容的提问来源于stack exchange,提问作者Przemek Dabek
相关产品推荐
相关产品推荐

