Partage
  • Partager sur Facebook
  • Partager sur Twitter

SUM comptée deux fois

Sujet résolu
    20 janvier 2021 à 10:10:38

    Bonjour,

    Je souhaite ressortir dans une requête 2 sommes concernant un coût total ainsi qu'un total de sommes facturées.
    Je fais donc ceci:

    SELECT
                        IFNULL(SUM(cp.cout * cp.heures), 0) AS cout,
                        IFNULL(SUM(cr.facturation), 0) AS facturation
                    FROM
                        contrats_previ cp
                    INNER JOIN contrats_facturation cr on cp.contrats_id = cr.contrats_id
                    WHERE
                        cp.contrats_id = MON_ID
                        AND cp.offert != 1

    J'ai 2 lignes de facturation, et j'ai en résultat de somme "cout", la somme multipliée par 2.
    Si je rajoute une 3ème ligne de facturation, alors cette somme fait x3...

    Mes tables:

    contrats_previ:
    - contrats_id
    - heures
    - cout
    - offert

    contrats_facturation:
    - contrats_id
    - facturation

    Par avance, merci pour votre aide! :)

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2021 à 16:13:22

      Bonjour,

      Le résultat est normal, pour comprendre, il suffit de retirer les SUM et de faire un SELECT * ...

      Une solution est de faire le calcul de facturation dans une sous-requête (voire dans une vue) :

      SELECT
      	IFNULL( SUM(cp.cout * cp.heures), 0 ) AS cout,
      	IFNULL( cr.facturation, 0) AS facturation
      FROM
      	contrats_previ cp
      		LEFT JOIN (
      				-- Somme de facturation par contrat
      				-- Peut être intégré dans une vue
      				SELECT
      					contrats_id,
      					SUM( facturation ) AS facturation
      				FROM contrats_facturation
      				GROUP BY contrats_id
      			) cr
      			ON cp.contrats_id = cr.contrats_id
      WHERE
      	cp.contrats_id = MON_ID
      	AND cp.offert != 1
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        21 janvier 2021 à 11:52:44

        Je comprenais bien le principe de l'erreur oui, mais je bloquais sur sa résolution et je n'ai pas pensé à une sous-requête.

        Merci! :)

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2021 à 12:25:09

          Tu peux améliorer cela en créant une vue correspondant à la sous-requête ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            21 janvier 2021 à 13:59:39

            Oui, après je n'ai besoin de cette donnée qu'ici pour le moment, je ne pense donc pas qu'une vue soit utile du coup.

            Si je vois que j'en aurai besoin ailleurs alors je créerai une vue en effet.

            Merci! :)

            • Partager sur Facebook
            • Partager sur Twitter

            SUM comptée deux fois

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown