Ste*_*goo 3 mysql postgresql group-by
我有一个看起来像这样的表格(实际案例的过度简化案例来表明我的观点)
CREATE TABLE sales (
id int,
currency VARCHAR(5),
price int
shop_id int
);
Run Code Online (Sandbox Code Playgroud)
现在我需要进行一个查询,该查询将为我提供类似此表的内容,按商店分组,但给出每种货币的销售额总和我的问题是,当我将货币列设置为非聚合时,它会失败,因为我的查询变得非标准。当我将货币添加到分组依据时,每种货币都会创建新行,这是我不想要的。我已经没有选择了,希望得到任何帮助或指向正确方向的指示。
我使用 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
Run Code Online (Sandbox Code Playgroud)
查询应生成的数据
shop_id | POUND | USDOLLAR
-----------------------------------------
1 | 400 | 300
-----------------------------------------
2 | 250 | 100
-----------------------------------------
3 | 400 | 100
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
您几乎明白了,尝试将 SUM() 放在 CASE 语句的开头。
SELECT shop_id,
SUM(CASE WHEN currency= "GBP" THEN price ELSE 0 END) AS POUND,
SUM(CASE WHEN currency= "USD" THEN price ELSE 0 END) AS USDOLLAR
GROUP BY shop_id
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24145 次 |
最近记录: |