如何在SQL中按投资者聚合数据并按规则设置货币列值
问题解决:按投资者分组聚合金额并按规则确定货币
原SQL的问题
- 语法错误:
sum(Amount)后缺少逗号,导致SQL无法正常执行 - 逻辑错误:CASE语句仅针对单行的货币值做判断,而非基于整个分组的货币分布情况;同时按
c1和Investors分组会拆分同一投资者的记录,无法实现按投资者统一聚合的需求
正确的SQL语句
SELECT SUM(Amount) AS `Amount(金额)`, CASE WHEN SUM(CASE WHEN currency = 'GBP' THEN 1 ELSE 0 END) > 0 THEN 'GBP' ELSE 'USD' END AS `currency(货币)`, Investors AS `Investors(投资者)` FROM your_table -- 替换为你的实际表名 GROUP BY Investors;
逻辑说明
- 金额聚合:
SUM(Amount)对同一投资者的所有金额求和,满足需求中的聚合要求 - 货币判断:
SUM(CASE WHEN currency = 'GBP' THEN 1 ELSE 0 END)统计当前投资者分组内GBP货币的记录数量- 若统计结果大于0,说明组内包含GBP,按规则显示
GBP - 若统计结果为0,说明组内只有USD或NULL,按规则显示
USD
- 分组规则:仅按
Investors分组,确保同一投资者的所有记录被合并为一行
验证结果
执行上述SQL后,将得到预期输出:
| Amount(金额) | currency(货币) | Investors(投资者) |
|---|---|---|
| 250 | GBP | Coinvest I |
| 860 | GBP | Paralell |
| 126 | USD | PSLO |
内容的提问来源于stack exchange,提问作者Sandhya Veeresh
相关产品推荐
相关产品推荐

