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 et SQL. Discussion :

[A-02] Group by et Having


Sujet :

Requêtes et SQL.

  1. #1
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut [A-02] Group by et Having
    Bonjour,

    J'ai deux tables :

    Produits => idProduit, LibProduit (clé primaire : idProduit)
    Ventes => Annee, idProduit, Quantite (clé primaire : Annee, idProduit)

    Je dois compter le nombre de ventes de TOUS les produits. J'ai donc fait la requête suivante qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Produits.LibProduit, Count(Ventes.idProduit) AS CompteDeidProduit
    FROM Produits LEFT JOIN Ventes ON Produits.idProduit = Ventes.idProduit
    GROUP BY Produits.LibProduit
    ORDER BY Count(Ventes.idProduit) DESC;
    Mon problème :
    Si j'ajoute une sélection sur une année donnée, le résultat ne comprend pas les produits pour lesquels il n'existe pas de vente.
    La requête en cause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Produits.LibProduit, Count(Ventes.idProduit) AS CompteDeidProduit
    FROM Produits LEFT JOIN Ventes ON Produits.idProduit = Ventes.idProduit
    GROUP BY Produits.LibProduit, Ventes.Annee
    HAVING Ventes.Annee = "2008"
    ORDER BY Count(Ventes.idProduit) DESC;
    Quelqu'un a une idée ?

    Merci

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Mettre la condition sur la date avant le groupement, il me semble...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Produits.LibProduit
         , Count(Ventes.idProduit) AS CompteDeidProduit
    
    FROM Produits LEFT JOIN Ventes 
                   ON Produits.idProduit = Ventes.idProduit
    WHERE Ventes.Annee = "2008"
    GROUP BY Produits.LibProduit, Ventes.Annee
    ORDER BY Count(Ventes.idProduit) DESC;
    
    le résultat ne comprend pas les produits pour lesquels il n'existe pas de vente.
    Jointures ? Ou produits n'ayant pas fait l'objet d'une vente ?


  3. #3
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Merci de m'aider,

    J'ai supprimer la clause HAVING et j'ai ajouté une clause WHERE avant le GROUP BY, mais je n'ai toujours pas les produits pour lesquels il n'existe pas de vente.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    C'est bon, j'ai trouvé. Pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT Produits.LibProduit
         , Count(Ventes.idProduit) AS CompteDeidProduit
     
    FROM Produits LEFT JOIN Ventes 
                   ON Produits.idProduit = Ventes.idProduit
    WHERE Ventes.Annee = "2008" OR IsNull(Ventes.Annee)
    GROUP BY Produits.LibProduit
    ORDER BY Count(Ventes.idProduit) DESC;

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

Discussions similaires

  1. GROUP BY et HAVING MAX
    Par dragoon83 dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/06/2014, 12h55
  2. [Oracle 81] GROUP BY et HAVING
    Par AllyKo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2008, 15h20
  3. Problème lié à l'utilisation de WHERE, GROUP BY et HAVING
    Par Colgateblancheur dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/06/2008, 09h32
  4. COUNT, GROUP BY et HAVING
    Par yobogs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2007, 14h34
  5. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 09h03

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