預(yù)先非常感謝您的支持。 我正在學(xué)習(xí) SQL 并生成一些數(shù)據(jù)來(lái)玩,但我堅(jiān)持做一件簡(jiǎn)單的事情。下面屏幕截圖中的表格顯示了我的 sales20 表的一部分,該表顯示了每個(gè)員工在 2020 年實(shí)現(xiàn)的銷售額以及區(qū)域和日期信息。
表銷量20
我有 2021 年的同一張桌子。我想做的是;我想提供員工姓名、地區(qū)、員工在 2020 年和 2021 年實(shí)現(xiàn)的總銷售額。我編寫(xiě)了以下查詢,但它沒(méi)有提供正確的數(shù)字。它帶來(lái)了比應(yīng)有的更高的東西。 重要的一點(diǎn)是,2020年和2021年的員工不一樣。例如,2021 年有一名新員工,這意味著他也應(yīng)該被列出,但該員工的 2020 年列應(yīng)該為空。
我的查詢:
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
結(jié)果的部分截圖:
結(jié)果:
你能告訴我我做錯(cuò)了什么嗎?
當(dāng)您需要合并兩個(gè)表時(shí),您正在連接它們 -
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;
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
您需要根據(jù)人員和區(qū)域來(lái)連接 2 個(gè)表,以進(jìn)行一對(duì)一連接。如果您僅基于員工加入,那么它會(huì)進(jìn)行一對(duì)多加入,因此您將得到損壞的輸出。
另一種方法是合并兩個(gè)表中的數(shù)據(jù),然后在此基礎(chǔ)上執(zhí)行聚合。這應(yīng)該會(huì)為您提供準(zhǔn)確的結(jié)果。
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