我有一张看起来像这样的表格(为了说明我的观点,我对实际情况进行了过度简化)
CREATE TABLE sales (
id int,
currency VARCHAR(5),
price int
shop_id int
);
现在我需要做一个查询,它会给我类似这个表的东西,按商店分组,但给出每种货币的销售额总和 我的问题是当我将货币列设为非聚合时,它会失败,因为我的查询变得非标准。当我将货币添加到组时,每种货币都会创建新行,这是我不想要的。我已经没有选择余地了,如果有任何帮助或指向正确方向的指示,我将不胜感激。
我使用 MySQL,但如果我能获得适用于更多数据库的解决方案,我将不胜感激(PostGreSQL 在 MySQL 之后位于列表的顶部)
查询不希望的结果
SELECT shop_id,
(CASE WHEN currency= "GBP" THEN SUM(price) ELSE 0 END) AS POUND,
(CASE WHEN currency= "USD" THEN SUM(price) ELSE 0 END) AS USDOLLAR
GROUP BY shop_id, currency
查询应生成的数据
shop_id | POUND | USDOLLAR
-----------------------------------------
1 | 400 | 300
-----------------------------------------
2 | 250 | 100
-----------------------------------------
3 | 400 | 100
-----------------------------------------
你几乎明白了,尝试将 SUM() 放在 CASE 语句的开头。
你很接近但颠倒了 SUM 和 CASE。尝试: