Page 1 sur 1

Première ligne d'un ORDER BY

Posté : 24 févr. 2020, 06:34
par Couin
Hello !!!

Je cale sur une requête :(

J'ai une table avec des titres pour des playlists hebdo, avec plusieurs colonnes, notamment :!titre, bpm, duree

Tous les titres joués sont dans cette table.

Il se peut qu'un titre ayant été joué plus d'une fois, mais la durée et le bpm n'ont pas forcément été saisis à chaque fois (car il se peut que le titre ait été joué en bonus).

Sachant que je liste tous les titres joués, classés par titre ascendant, avec leur bpm et leur durée, j'ai une requête existante, que je simplifierais ici (car en réalité je ramasse plus d'infos dans d'autres colonnes de la table) :

Code : Tout sélectionner

SELECT titre, duree, bpm FROM `playlist` GROUP BY titre, bpm ORDER BY titre ASC
Pour exemple ici, je limite la requête à quelques résultats, sans les grouper :

Code : Tout sélectionner

SELECT titre, duree, bpm FROM `playlist` WHERE `titre` LIKE 'Klubbheads%' ORDER BY titre ASC
Voici les résultats :

Code : Tout sélectionner

Klubbheads - Dubbhopping 05:50 132.7 Klubbheads - Dubhopping 0.0 Klubbheads - Kicking Hard 0.0 Klubbheads - Kicking Hard 0.0 Klubbheads - Kicking Hard 07:13 134.8 Klubbheads - Kicking Hard 0.0 Klubbheads - Kicking Hard (Euro Dub) 0.0
On peut voir que "Kicking Hard" a été joué 3 fois en tant que bonus et une fois en playlist, pour laquelle j'ai noté bpm et durée.

Si je groupe par titres :

Code : Tout sélectionner

SELECT titre, duree, bpm FROM `playlist` WHERE `titre` LIKE 'Klubbheads%' GROUP BY titre ORDER BY titre ASC
Voici les résultats :

Code : Tout sélectionner

Klubbheads - Dubbhopping 05:50 132.7 Klubbheads - Dubhopping 0.0 Klubbheads - Kicking Hard 0.0 Klubbheads - Kicking Hard (Euro Dub) 0.0
J'aimerais autant récupérer le Kicking Hard qui a bpm et durée de renseignés.

Donc j'ajoute un critère à l'ORDER BY :

Code : Tout sélectionner

SELECT titre, duree, bpm FROM `playlist` WHERE `titre` LIKE 'Klubbheads%' GROUP BY titre ORDER BY titre ASC, bpm DESC
Les résultats sont les mêmes (et même si le mets bpm ASC).

J'ai beau tester dnas tous les sens, pas moyen d'obtenir :

Code : Tout sélectionner

Klubbheads - Dubbhopping 05:50 132.7 Klubbheads - Dubhopping 0.0 Klubbheads - Kicking Hard 07:13 134.8 Klubbheads - Kicking Hard (Euro Dub) 0.0
Un tite nidée ? :D

Merkouin !

Re: Première ligne d'un ORDER BY

Posté : 27 févr. 2020, 09:39
par Spols
j'ai pas testé, mais je penserais à faire 2 requète imbriquée la rpremière (la plus "profonde" ) avec le ORDER BY et la 2ème avec le GROUP BY

Re: Première ligne d'un ORDER BY

Posté : 27 févr. 2020, 23:58
par Couin
Hello,

Merci pour ta réponse.

Je parviens au résultat voulu par cette requête :

Code : Tout sélectionner

SELECT * FROM ( SELECT titre, duree, bpm FROM `playlist` WHERE `titre` LIKE 'Klubbheads%' ORDER BY titre ASC, bpm DESC ) AS resultats GROUP BY titre
La syntaxe est-elle bonne ou bien y a-t-il plus propre ?

Si c'est au mieux comme ça , je marquerais en résolute :)