suchen

Heim  >  Fragen und Antworten  >  Hauptteil

MySQL-Probleme beim Zusammenfassen von Verkaufsdaten aus zwei separaten Tabellen

Vielen Dank im Voraus für Ihre Unterstützung. Ich lerne SQL und generiere ein paar Daten zum Spielen, aber bei einer einfachen Sache hänge ich fest. Die Tabelle im Screenshot unten zeigt einen Teil meiner sales20-Tabelle, die die von jedem Mitarbeiter im Jahr 2020 erzielten Umsätze zusammen mit Regions- und Datumsinformationen zeigt.

Tischverkauf 20

Ich habe den gleichen Tisch aus dem Jahr 2021. Ich möchte den Namen des Mitarbeiters, die Region und den Gesamtumsatz angeben, den der Mitarbeiter in den Jahren 2020 und 2021 erzielt hat. Ich habe die folgende Abfrage geschrieben, sie liefert jedoch nicht die richtigen Zahlen. Es bringt etwas Höheres, als es verdient. Der wichtige Punkt ist, dass die Mitarbeiter in den Jahren 2020 und 2021 unterschiedlich sind. Beispielsweise gibt es im Jahr 2021 einen neuen Mitarbeiter, was bedeutet, dass er ebenfalls aufgeführt werden sollte, die Spalte 2020 für diesen Mitarbeiter jedoch leer sein sollte.

Meine Anfrage:

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

Teilweiser Screenshot der Ergebnisse:

Ergebnis:

Kannst du mir sagen, was ich falsch gemacht habe?

P粉391677921P粉391677921227 Tage vor456

Antworte allen(2)Ich werde antworten

  • 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;

    Antwort
    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

    Antwort
    0
  • StornierenAntwort