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 :

COUNT(DISTINCT champ) et GROUP BY


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut COUNT(DISTINCT champ) et GROUP BY
    Bonjour,

    J'essaie de puis hier a trouver la solution pour une requete assez complexe mais j'y arrive pas

    j'ai 2 tables relationnelles:
    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
     
    products:
    id_prod, id_theme, name
    ------------------------------------------
    10        101      Produit 1
    11        101      Produit 2
     
    products_references:
    id_prod, id_prod_ref, id_size, id_color, price, discount
    ------------------------------------------------------------------
    10          101          10       10     15.00      5
    10          102          10       11     15.00      5
    10          103          11       10     15.00      0
    10          104          12       10     15.00      0
    ...
    j'ai construit une requete SQL pour afficher tous les produits les moins chers groupé par id_prod. dans cette requete je recupere aussi l'id_prod_ref du produit le moins cher.
    Tout marche bien, sauf lorsque je rajoute un COUNT(DISTINCT id_size) et COUNT(DISTINCT id_color) pour connaitre le nombre de tailles et couleurs dispo pour chaque produit.

    Voici ma requette sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT p.name, pr.id_prod, pr.id_prod_ref, pr.price AS price_org, pr.price * (1 - (pr.discount / 100)) AS price, COUNT(DISTINCT pr.id_size) AS num_sizes, COUNT(DISTINCT pr.id_color) AS num_colors
    FROM products_references AS pr
    INNER JOIN 
       (SELECT id_prod, MIN(price * (1 - (discount / 100))) AS price_final
       FROM products_references
       GROUP BY id_prod) AS pr2 ON pr.id_prod = pr2.id_prod
    INNER JOIN products AS p ON p.id_prod = pr.id_prod
    INNER JOIN brands AS b ON b.id_brand = p.id_brand
    WHERE pr.price * (1 - (pr.discount / 100)) = pr2.price_final
    AND p.id_theme = 101
    GROUP BY pr.id_prod
    ORDER BY p.name
    Auriez vous SVP une idee de ce qui ne va pas dans cette requete?

    MErci par avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour
    Je ne suis pas un pro... loin de la et j'ai le même problème il me semble.
    Je ne crois pas que dans une requête on puisse avoir une colonne calculée et des colonnes "indicatives" qui reprennent des infos.
    je ne sais pas si j'arrive a être très clair mais si quelqu'un peu me contredire, ce serai avec plaisir!!


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci Elovita pour ta reponse

    On va attendre les avis et suggestion. On arrete jamais d'apprendre

  4. #4
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    Par défaut
    Je suggere re separé ta requete en deux requetes!

    L'un avec les calculs
    L'autre avec les COUNT()

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Tout marche bien, sauf lorsque je rajoute un COUNT(DISTINCT id_size) et COUNT(DISTINCT id_color)
    Et donc qu'est ce qui ne va plus ?

    En attendant, votre requête est fausse, toutes les colonnes non agrégées doivent être dans le GROUP BY.
    http://cedric-duprez.developpez.com/...fier-group-by/

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    bonjour,

    j'ai pour l'instant retiré les COUNT(DISTINCT ...)

    Et donc qu'est ce qui ne va plus ?
    il m'affiche toujour 1 pour la colonne id_size. je ne sais pas pourquoi!

Discussions similaires

  1. COUNT DISTINCT sur deux champs
    Par Ceubex dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/01/2014, 15h11
  2. [MySQL-5.6] Tableau croisé et fonction COUNT(DISTINCT( CHAMP ))
    Par nemikap dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/10/2013, 11h55
  3. [AC-2007] Problème avec COUNT DISTINCT sur plusieurs champs :
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/10/2012, 14h33
  4. [AC-2003] Select count(distinct champ) impossible
    Par js8bleu dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/01/2010, 10h13
  5. [A-00] Count(Distinct) avec plusieurs Select et Group by...
    Par Thomak dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/10/2008, 11h11

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