匯總兩個獨立表的銷售資料時遇到 MySQL 問題
P粉391677921
P粉391677921 2024-04-04 14:22:13
0
2
501

預先非常感謝您的支持。 我正在學習 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粉391677921
P粉391677921

全部回覆(2)
P粉476475551

當您需要合併兩個表時,您正在連接它們 -

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粉138871485
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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板