Mysql
使用 GROUP BY 的情況
我有一張看起來像這樣的表格(為了說明我的觀點,我對實際情況進行了過度簡化)
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,