首頁  >  問答  >  主體

匯總兩個獨立表的銷售資料時遇到 MySQL 問題

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

全部回覆(2)我來回復

  • P粉476475551

    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;

    回覆
    0
  • P粉138871485

    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

    回覆
    0
  • 取消回覆