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 :

GROUP BY (produits et groupes produits)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut GROUP BY (produits et groupes produits)
    Bonjour,

    version MYSQL : 5.0.68

    J'ai une table produit. Chaque produit appartient a une categorie.
    Ce que je cherche a faire :

    Recuperer les lignes produits les moins chers de chaque categorie, le tout groupé par categorie.

    Voila ma requete (qui renvoie pas forcement le produit le moins cher) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `PRO_Id`, `PRO_GRO_Id`, `PRO_PrixEuro`, `PRO_EstEnPromo`
    FROM  `produits` 
    GROUP BY PRO_GRO_Id
    ORDER BY  `PRO_Id` ASC 
    LIMIT 0 , 20
    ou PRO_GRO_Id est la categorie

    Par avance, je vous remercie pour votre aide, qui va m'etre précieuse.

    Niko

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Vous avez un besoin similaire et une réponse adaptée dans le fil située juste en-dessous du votre.
    http://www.developpez.net/forums/d65...e/#post3857178

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    J'en suis arrivé la, mais cette requete ne renvoie pas les lignes attendues.

    Elle renvoie le produit le moins cher si ce produit a un Id inferieur au aux produits de le meme categorie, sinon le produit n'apparait pas du tout dans les resultats...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT e.PRO_Id, e.PRO_GRO_Id, e.PRO_PrixEuro, e.PRO_EstEnPromo
    FROM produits AS e
    INNER JOIN (
     
    SELECT PRO_Id, MIN( PRO_PrixEuro ) AS PrixMini
    FROM  `produits` 
    GROUP BY PRO_GRO_Id
    )tmp ON e.PRO_Id = tmp.PRO_Id
    WHERE e.PRO_PrixEuro = tmp.PrixMini
    AND e.PRO_Id = tmp.PRO_Id
    Vous avez une idée ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    Pour ceux que ca interesse, voila un debut de solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT PRO_Id, PRO_GRO_Id, PRO_PrixEuro, PRO_EstEnPromo
    FROM produits
    WHERE PRO_PrixEuro
    IN (
     
    SELECT MIN( PRO_PrixEuro )
    FROM produits
    GROUP BY PRO_GRO_Id
    )
    GROUP BY PRO_GRO_Id

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    on dirait que j'ai finit par trouver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t1.PRO_Id, t1.PRO_PrixEuro
    FROM produits t1
    INNER JOIN (
        SELECT PRO_Id, MIN(PRO_PrixEuro) AS PrixMini
        FROM produits
        GROUP BY PRO_GRO_Id) AS t2
    ON t1.PRO_PrixEuro = t2.PrixMini
    GROUP BY PRO_GRO_Id

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Bravo ! Ca fait plaisir de voir que vous vous êtes creusé la tête !
    Néanmoins vous avez une petite erreur dans votre code au niveau de la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT t1.PRO_Id, t1.PRO_PrixEuro
    FROM produits t1
    INNER JOIN (
        SELECT PRO_Id, MIN(PRO_PrixEuro) AS PrixMini
        FROM produits
        GROUP BY PRO_GRO_Id) AS t2
       ON t1.PRO_Id = t2.PRO_Id
      AND t1.PRO_PrixEuro = t2.PrixMini
    GROUP BY PRO_GRO_Id

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/06/2012, 16h18
  2. Réponses: 6
    Dernier message: 27/02/2009, 13h14
  3. Fonction produit avec group by
    Par nicoaix dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/09/2008, 17h31
  4. Ajouter un groupe dans un autre groupe
    Par CedrX dans le forum Administration système
    Réponses: 0
    Dernier message: 10/01/2008, 12h20
  5. Equivalent d'un GROUP BY d'un GROUP BY
    Par french-petzouille dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/10/2007, 11h07

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