Problèmes MySQL lors de la synthèse des données de ventes de deux tables distinctes
P粉391677921
P粉391677921 2024-04-04 14:22:13
0
2
498

Merci beaucoup d'avance pour votre soutien. J'apprends SQL et je génère des données avec lesquelles jouer, mais je suis bloqué sur une chose simple. Le tableau dans la capture d'écran ci-dessous montre une partie de mon tableau sales20, qui montre les ventes réalisées par chaque employé en 2020 ainsi que les informations sur la région et la date.

Ventes de table 20

J'ai la même table de 2021. Ce que je veux faire, c'est fournir le nom de l'employé, la région et les ventes totales réalisées par l'employé en 2020 et 2021. J'ai écrit la requête suivante mais elle ne donne pas les bons chiffres. Cela apporte quelque chose de plus élevé que ce qu’il mérite. Le point important est que les salariés en 2020 et 2021 sont différents. Par exemple, il y a un nouvel employé en 2021, ce qui signifie qu'il doit également être répertorié, mais la colonne 2020 de cet employé doit être vide.

Ma requête :

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

Capture d'écran partielle des résultats :

Résultat :

Pouvez-vous me dire ce que j'ai fait de mal ?

P粉391677921
P粉391677921

répondre à tous(2)
P粉476475551

Lorsque vous devez fusionner deux tables, vous les rejoignez -

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

Vous devez rejoindre 2 tables en fonction de la personne et de la région pour une jointure individuelle. Si vous vous inscrivez uniquement sur la base des employés, le système effectuera une adhésion un à plusieurs et vous obtiendrez une sortie corrompue.

Une autre approche consiste à fusionner les données des deux tables, puis à effectuer une agrégation sur cette base. Cela devrait vous donner des résultats précis.

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal