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

Langage SQL Discussion :

Requête avec jointure et sum()


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Requête avec jointure et sum()
    Bonjour,

    J'aurais bien besoin d'aide avec un requete que je n'arrive pas à formuler correctement
    J'ai une liste de client dans un table d'un coté et un chiffre d'affaire pour chacun des clients par année
    Nom : Capture d'écran 2024-05-31 111058.png
Affichages : 83
Taille : 6,7 Ko

    Je voudrais pour chaque client le montant du CA total pour les année 2022 et plus uniquement

    Requete 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CLI.ID, CLI.NOM, SUM(CA.MONTANT) AS MONTANT FROM CLIENTS AS CLI LEFT JOIN CA ON CLI.ID=CA.ID GROUP BY CLI.ID, CLI.NOM
    Resultat 1 :
    Là ça fonctionne j'ai bien la somme du CA par client

    Si j'essaye de mettre la condition sur l'année
    Requete 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CLI.ID, CLI.NOM, SUM(CA.MONTANT) AS MONTANT FROM CLIENTS AS CLI LEFT JOIN CA ON CLI.ID=CA.ID WHERE CA.ANNEE >= 2022 GROUP BY CLI.ID, CLI.NOM
    Resultat 2 :
    Là par contre je n'ai pas le CLIENT B qui apparait (Je voudrais qu'il apparaisse avec un montant de 0)

    J'espère avoir été le plus clair possible ^^
    Au passage j'ai essayé avec un COALESCE mais pas mieux

    Merci à vous

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 291
    Points : 39 558
    Points
    39 558
    Billets dans le blog
    9
    Par défaut
    C'est un piège classique : mettre une restriction WHERE portant sur une colonne d'une table OUTER provoque implicitement une jointure INNER .
    Ce faisant, les clients absents de la table OUTER ne sont plus extraits.
    Il faut déporter la restriction dans le prédicat de jointure ON...

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 194
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 194
    Points : 8 409
    Points
    8 409
    Billets dans le blog
    17
    Par défaut
    CA.ANNEE n'est pas supérieure ou égale à 2022 quand il n'y a pas de ligne pour un client dans CA
    => Déplace le critère dans la jointure externe, ainsi tu auras toujours 1 ligne pour chaque client

    SELECT ALL
    	CLI.ID, CLI.NOM, 
    	COALESCE(SUM(CA.MONTANT), 0) AS MONTANT
    FROM CLIENTS AS CLI
    LEFT OUTER JOIN CA ON TRUE
    	AND CLI.ID = CA.ID_CLIENT
    	AND CA.ANNEE >= 2022
    GROUP BY CLI.ID, CLI.NOM
    ;
    Edit : devanced
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Vous êtes vraiment trop fort
    Merci beaucoup pour votre aide à tous les 2 !

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 291
    Points : 39 558
    Points
    39 558
    Billets dans le blog
    9
    Par défaut
    Du coup, pensez à marquer le sujet à "résolu" (bouton en bas) si c'est bien le cas

  6. #6
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2024
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    bonjour,

    je reviens sur cette affaire pour repartir de votre requête
    il faut mettre or CA.ANNEE is null car c'est une jointure externe

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CLI.ID, CLI.NOM, SUM(CA.MONTANT) AS MONTANT FROM CLIENTS AS CLI LEFT JOIN CA ON CLI.ID=CA.ID WHERE (CA.ANNEE >= 2022 or CA.ANNEE is null) GROUP BY CLI.ID, CLI.NOM

    j'espères que je ne vous ai pas déranger en revenant sur une affaire résoulue autrement
    cdt

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

Discussions similaires

  1. Pb update avec jointure et sum et decode
    Par lepetitjo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2013, 17h55
  2. [MySQL] Requete SUM avec jointure
    Par dam28800 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/09/2009, 09h03
  3. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24
  4. Script avec JOINTURE et CASE
    Par Labienus dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/02/2004, 09h40
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33

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