搜索

首页  >  问答  >  正文

汇总两个独立表的销售数据时遇到 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粉391677921227 天前455

全部回复(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
  • 取消回复