Maison  >  Questions et réponses  >  le corps du texte

Problèmes MySQL lors de la synthèse des données de ventes de deux tables distinctes

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粉391677921P粉391677921178 Il y a quelques jours359

répondre à tous(2)je répondrai

  • P粉476475551

    P粉4764755512024-04-05 11:55:05

    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;

    répondre
    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

    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

    répondre
    0
  • Annulerrépondre