使用 GROUP BY 的情况

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)

McN*_*ets 5

您几乎明白了,尝试将 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)