預先非常感謝您的支持。 我正在學習 SQL 並產生一些資料來玩,但我堅持做一件簡單的事情。下面螢幕截圖中的表格顯示了我的 sales20 表的一部分,該表顯示了每位員工在 2020 年實現的銷售額以及區域和日期資訊。
表格銷量20
我有 2021 年的同一張桌子。我想做的是;我想提供員工姓名、地區、員工在 2020 年和 2021 年實現的總銷售額。我編寫了以下查詢,但它沒有提供正確的數字。它帶來了比應有的更高的東西。 重要的一點是,2020年和2021年的員工不一樣。例如,2021 年有一名新員工,這意味著他也應該被列出,但該員工的 2020 年列應該為空。
我的查詢:
SELECT sales20.staff, sales20.region, SUM(sales20.amount) AS Total_20, SUM(sales21.amount) AS Total_21 FROM sales20 JOIN sales21 ON sales20.staff = sales21.staff GROUP BY staff, region
結果的部分截圖:
結果:
你能告訴我我做錯了什麼嗎?
P粉4764755512024-04-05 11:55:05
當您需要合併兩個表時,您正在連接它們 -
SELECT staff, region, SUM(IF(YEAR(saledate) = '2020',amount,0) AS Total_20, SUM(IF(YEAR(saledate) = '2021',amount,0) AS Total_21, FROM (SELECT staff, region, amount, saledate FROM sales20 UNION ALL SELECT staff, region, amount, saledate FROM sales21) GROUP BY staff, region;
P粉1388714852024-04-05 00:24:31
SELECT sales20.staff, sales20.region, SUM(sales20.amount) AS Total_20, SUM(sales21.amount) AS Total_21 FROM sales20 JOIN sales21 ON sales20.staff = sales21.staff AND sales20.region = sales21.region GROUP BY staff, region
您需要根據人員和區域來連接 2 個表,以進行一對一連接。如果您僅基於員工加入,那麼它會進行一對多加入,因此您將得到損壞的輸出。
另一種方法是合併兩個表中的數據,然後在此基礎上執行聚合。這應該會為您提供準確的結果。
WITH combined_data AS ( SELECT staff, region, saledate, amount FROM sales20 UNION ALL SELECT staff, region, saledate, amount FROM sales21 ) SELECT staff, region, SUM(CASE WHEN year(saledate) = 2020 THEN amount ELSE 0 END) AS Total_20, SUM(CASE WHEN year(saledate) = 2021 THEN amount ELSE 0 END) AS Total_21 FROM combined_data GROUP BY staff, region