Mysql

使用 GROUP BY 的情況

  • March 29, 2017

我有一張看起來像這樣的表格(為了說明我的觀點,我對實際情況進行了過度簡化)

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 語句的開頭。

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

你很接近但顛倒了 SUM 和 CASE。嘗試:

SUM(CASE WHEN currency= "GBP" THEN price ELSE 0 END) AS POUND, 

引用自:https://dba.stackexchange.com/questions/168540