IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Retour 0 Si null avec SUM() et GROUP BY


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 32
    Points
    32
    Par défaut Retour 0 Si null avec SUM() et GROUP BY
    Bonjour,

    Je cherche à récupérer le total des commandes de certains comptes client via une requête sur MySQL 5.6.38.
    Si je supprime le GROUP BY, j'ai le total tout clients confondus, en l'ajoutant j'ai bien le montant par client ayant passé des commandes. Je cherche à retourner 0 pour ceux qui n'ont pas passé de commande sur la période.

    Merci pour vos retours.

    Voici la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SUM(a.price)
    FROM answers a 
    INNER JOIN demands d 
        ON a.id = d.answerid 
        AND d.deletedat IS NULL 
    WHERE d.createdat BETWEEN '2021-01-01 00:00:00.0' AND '2021-01-26 23:59:59.0'
        AND a.deletedat IS NULL 
        AND a.customerid IN ( 1, 2, 4, 5, 8, 18, 19, 21, 26, 33, 35, 43, 54, 68, 82, 87, 97, 103, 105, 112, 113, 126, 134, 142, 143, 144, 148, 151, 155, 200, 205, 232, 264, 265, 389, 390, 393, 432, 522, 534, 535, 536, 537, 538, 539, 545, 568, 589, 606, 613, 614, 645, 650, 664, 668, 670, 729, 730, 797, 807, 868, 980, 988, 1010, 1102, 1112, 1122, 1145, 1193, 1198, 1294 )
        GROUP BY a.customerid
    Ce que je veux
    Je cherche à avoir un retour pour chaque ID client avec 0 pour ceux qui n'ont pas de commande sur la période

    Ce que j'obtiens
    J'ai en retour de données sur pour les clients qui ont des commandes, mais aucune ligne pour ceux qui n'en n'ont pas.

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Dans ta requête, quelle est la table qui liste tous les clients, y compris ceux qui n'ont pas de commande ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Bonjour @al1_24.

    J'ai une tables customers avec les comptes clients
    avec une ok sur customers.id

    Une answers qui est en relation avec la table demands ce qui une fois en relation représente une commande.
    Le lien vers la table customer est sur le la fk answers.customerid

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il suffit donc d'ajouter cette table dans la requête avec une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  c.customerid
        ,   SUM(a.price)
    FROM    customers c 
        LEFT JOIN answers a
            INNER JOIN demands d 
                ON  d.answerid = a.id 
                AND d.deletedat IS NULL 
                AND d.createdat BETWEEN '2021-01-01 00:00:00.0' AND '2021-01-26 23:59:59.0'
            ON  a.customerid = c.id
            AND a.deletedat IS NULL 
    WHERE   c.customerid IN ( 1, 2, 4, 5, 8, 18, 19, 21, 26, 33, 35, 43, 54, 68, 82, 87, 97, 103, 105, 112, 113, 126, 134, 142, 143, 144, 148, 151, 155, 200, 205, 232, 264, 265, 389, 390, 393, 432, 522, 534, 535, 536, 537, 538, 539, 545, 568, 589, 606, 613, 614, 645, 650, 664, 668, 670, 729, 730, 797, 807, 868, 980, 988, 1010, 1102, 1112, 1122, 1145, 1193, 1198, 1294)
    GROUP BY c.customerid
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Merci à toi, je comprends l'approche.
    Du coup je me rends compte que c'est lourd en terme de traitement.
    Je vais essayer de remplacer le IN() par une sous requête, j'imagine que ça pourrais apporter du plus.

    du coup au final ça donne ça chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  c.id, IFNULL(SUM(a.price),0)
    FROM customers c 
        LEFT JOIN answers a
            INNER JOIN demands d 
                ON  d.answerid = a.id 
                AND d.deletedat IS NULL 
                AND d.createdat BETWEEN '2021-01-01 00:00:00.0' AND '2021-01-26 23:59:59.0'
            ON  a.customerid = c.id
            AND a.deletedat IS NULL 
    WHERE  c.id IN ( 1, 2, 4, 5, 8, 18, 19, 21, 26, 33, 35, 43, 54, 68, 82, 87, 97, 103, 105, 112, 113, 126, 134, 142, 143, 144, 148, 151, 155, 200, 205, 232, 264, 265, 389, 390, 393, 432, 522, 534, 535, 536, 537, 538, 539, 545, 568, 589, 606, 613, 614, 645, 650, 664, 668, 670, 729, 730, 797, 807, 868, 980, 988, 1010, 1102, 1112, 1122, 1145, 1193, 1198, 1294)
    GROUP BY c.id

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. N'arrive pas additioner avec SUM ou GROUP BY
    Par nonorpz dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/09/2017, 17h09
  2. Rang avec sum et group by
    Par Dadishome dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/05/2010, 21h52
  3. Probleme avec SUM et GROUP BY de 2 tables [FIREBIRD]
    Par fthdz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/02/2010, 18h22
  4. PB Pourcentage Sur requête avec SUM et GROUP BY
    Par laetus dans le forum Langage SQL
    Réponses: 9
    Dernier message: 11/06/2009, 14h18
  5. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo