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 :

Mauvaise utilisation de GROUP BY


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut Mauvaise utilisation de GROUP BY
    Bonjour,

    Je voudrais récupérer les derniers titres ajoutés par les 10 derniers artistes (en sachant qu'un artiste peut ajouter plusieurs oeuvres), toutes les données sont contenus dans la même table "musique".

    Voici la requête (non valide à cause de GROUPE BY) que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT artiste_id, titre
    			FROM musique
    			GROUP BY artiste_id
    			WHERE
    			is_disabled = 0 AND is_deleted = 0
    			ORDER BY created_at
    			LIMIT 0, 10
    Merci !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    La clause GROUP BY ce met après la clause WHERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT artiste_id, titre
    FROM musique
    WHERE
    is_disabled = 0 AND is_deleted = 0
    GROUP BY artiste_id
    ORDER BY created_at
    LIMIT 0, 10
    Maintenant, il y a quelque problèmes dans votre requête :
    - les colonnes selectionnées sans fonction d'aggrégation doivent paraitrent dans votre clause GROUP BY (artiste_id et titre)
    - Si vous n'utilisez pas de fonction d'aggrégation, le GROUP BY ne sert à rien et il faut alors utiliser un DISTINCT (moins couteux)
    - Votre clause ORDER BY n'est pas bonne non plus car elle est illogique (vous avez un group by et vous voullez ordonner le résultat sur une colonne non aggrégée).


    Et pour finir, êtes vous sûre de vouloir utiliser un "distinct" ici ? avez-vous des doublons ?


    edit :
    group by : http://sqlpro.developpez.com/cours/sqlaz/ensembles/
    order by : http://sqlpro.developpez.com/cours/sqlaz/select/#L2

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je voudrais récupérer les derniers titres ajoutés par les 10 derniers artistes
    Qu'est-ce qui détermine les derniers artistes et les derniers titres ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select artiste_id ,max(created_at) 
    from musique
    where is_disabled = 0 AND is_deleted = 0
    GROUP BY artiste_id
    ORDER BY max(created_at) desc 
    LIMIT 10 ,1
    donne la date apres laquelle seuls 10 artistes ont ajouté des oeuvres ( peut etre en plusieurs fois ... )

Discussions similaires

  1. Bug de CString ? ou mauvaise utilisation !
    Par globule71 dans le forum MFC
    Réponses: 11
    Dernier message: 12/04/2007, 17h36
  2. Réponses: 5
    Dernier message: 11/04/2007, 13h02
  3. Mauvaise utilisation d'une DLL ?
    Par _SamSoft_ dans le forum C
    Réponses: 6
    Dernier message: 21/02/2007, 00h14
  4. [MySQL 5.0] RAND() inefficace quand utilisation de GROUP BY
    Par Takusen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/11/2006, 15h39
  5. [XSD] Utilisation de groupes de balises xhtml
    Par Kehel dans le forum Valider
    Réponses: 7
    Dernier message: 30/01/2004, 09h55

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