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 :

pb d'agregation et group by


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut pb d'agregation et group by
    Bonjour,

    voilà une numEditionLivre a plusieurs numItemAVendre, je voudrais récupérer les numItemAVendre des numEditionLivre qui ont plus de deux exemplaires.
    Mais je bloque car pour avoir le nombre je dois faire un group by numEditionLivre, et si je fais ça je n'aurais qu'un numItemAVendre pour cette numEditionLivre. Alors comment faire pour avoir tous les numItemAVendre des numEditionLivre ayant plus de deux examplaires ?
    Est ce possible ? (Mysql)

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    SELECT EL.numEditionLivre,
    	L.titre,
    	LAV.codeEmplacement,
    	EL.numTypeCollection AS numTypeCollec,
    	IAV.numItemAVendre, 
    	ifnull(CB.codeBarre,EL.ISBN) AS product_id,
    	EL.ISBN,
    	CB.codeBarre AS EAN,
    	IAV.enVente,
    	IAV.prix
     
             FROM editionlivre as EL 
    		INNER JOIN codeBarre AS CB ON EL.numEditionLivre = CB.numEditionLivre
    		LEFT JOIN livreavendre as LAV on LAV.numEditionLivre=EL.numEditionLivre 
    		LEFT JOIN itemavendre as IAV on LAV.numItemAVendre=IAV.numItemAVendre  
    		LEFT JOIN livre as L on EL.refLivre = L.reflivre
    	WHERE  IAV.enVente=1 ORDER BY numItemAVendre DESC

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Je ne connais pas où on est mysql avec les sous requêtes,
    mais je te propose cette solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    SELECT EL.numEditionLivre,
    	L.titre,
    	LAV.codeEmplacement,
    	EL.numTypeCollection AS numTypeCollec,
    	IAV.numItemAVendre, 
    	ifnull(CB.codeBarre,EL.ISBN) AS product_id,
    	EL.ISBN,
    	CB.codeBarre AS EAN,
    	IAV.enVente,
    	IAV.prix
     
    FROM editionlivre  EL 
    INNER JOIN codeBarre AS CB ON EL.numEditionLivre = CB.numEditionLivre
    LEFT JOIN livreavendre AS LAV ON LAV.numEditionLivre=EL.numEditionLivre 
    LEFT JOIN itemavendre AS IAV ON LAV.numItemAVendre=IAV.numItemAVendre  
    LEFT JOIN livre AS L ON EL.refLivre = L.reflivre
    WHERE  IAV.enVente=1 
    and EL.numEditionLivre in  (Select numEditionLivre
                                        From editionlivre 
                                        Group by numEditionLivre
                                        Having count(*)>2 )  
     
    ORDER BY numItemAVendre DESC
    A+

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci c'est ce que j'ai finalement fini par faire, sauf que j'ai remis ma condition WHERE IAV.enVente=1
    dans ma sous requete, elle y est deux fois mais c'est plus rapide.. donc je ne sais pas où il est préférable de la mettre.


  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Si vous écrivez "WHERE IAV.enVente=1" vous perdez la jointure externe.
    Vous pouvez écrire par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT JOIN itemavendre AS IAV
      ON LAV.numItemAVendre = IAV.numItemAVendre
     AND IAV.enVente = 1

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    ah bon ?
    donc si on met un where après un left join on perd la jointure ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Pas la jointure mais son aspect externe.

    Un jointure externe c'est pour demander "si la donnée n'existe pas, merci de quand même me ramener un résultat".

    Si maintenant vous ajoutez "mais cette colonne je veux qu'elle soit toujours égale à 1", vous enlevez la possibilité qu'elle ne valle rien.

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

Discussions similaires

  1. agregation sans group by comment faire ?
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/12/2007, 14h53
  2. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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