Requête SQL, le plus grand

Scanf6
Invité n'ayant pas de compte PHPfrance

07 déc. 2013, 16:07

SELECT Race.LibelleRace, COUNT(Chien.NumChien) AS tot
FROM Race, Appartenir, Chien
WHERE Race.Id_Race=Appartenir.Id_Race
AND Appartenir.NumChien=Chien.NumChien
GROUP BY Race.LibelleRace;
Bonjour a tous, le code SQL ci dessus, permet d'afficher pour chaque races de chiens, le nombres de chien appartenant a ladite race, un peu dans le genre:
-Chihuahua: 5
-Boxer: 2
-Dalmatients: 12

Mon problème est que je veut maintenant pouvoir afficher la race ayant le plus grand nombre de chien(dans notre cas, "dalmatients"), je me suis dis qu'il fallait d'abord compter le nombre de chien par race, puis ensuite pouvoir retourner la plus grande valeur du COUNT, je ne sais pas comment, j'ai penser a une sous requête avec un MAX que j'ai tourner dans tout les sens mais en vain, merci de bien vouloir m'aider :)

Mammouth du PHP | 571 Messages

07 déc. 2013, 18:01

bonjour,

Plus simple pour ne récupérer qu'une seule ligne max:
SELECT Race.LibelleRace, COUNT(Chien.NumChien) AS tot
FROM Race, Appartenir, Chien
WHERE Race.Id_Race=Appartenir.Id_Race
AND Appartenir.NumChien=Chien.NumChien
GROUP BY Race.LibelleRace ORDER BY tot DESC LIMIT 1

Sinon si plusieurs races ont le même nombre max de chiens par exemple Dalmatients :12, Boxer :12 la requête suivante aura l'avantage de retourner tous les maxis de chien par race:
SELECT Race.LibelleRace, COUNT(Chien.NumChien) AS tot
FROM Race, Appartenir, Chien
WHERE Race.Id_Race=Appartenir.Id_Race
AND Appartenir.NumChien=Chien.NumChien
GROUP BY Race.LibelleRace HAVING tot =(SELECT MAX(totChien) FROM
 					(
                                        SELECT Race.LibelleRace, COUNT(Chien.NumChien) AS totChien
					FROM Race, Appartenir, Chien
					WHERE Race.Id_Race=Appartenir.Id_Race
					AND Appartenir.NumChien=Chien.NumChien
					GROUP BY Race.LibelleRace 
					) as maxChien
					);