MySQL-Probleme beim Zusammenfassen von Verkaufsdaten aus zwei separaten Tabellen
P粉391677921
P粉391677921 2024-04-04 14:22:13
0
2
349

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粉391677921
P粉391677921

Antworte allen(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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!