Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/10/2011, 13h35   #1
Membre régulier
 
Inscription : octobre 2010
Messages : 253
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 253
Points : 92
Points : 92
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 :
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 !
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 13h47   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
bonjour,

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

Code :
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 13h49   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 15h14   #4
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Code :
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 ... )
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h41.


 
 
 
 
Partenaires

Hébergement Web