Gérer le tri et le regroupement dans MySQL : combiner ORDER BY et GROUP BY pour des résultats spécifiques
Dans MySQL, obtenir le tri et le regroupement souhaités des les données peuvent être difficiles lorsque l’ordre des opérations est en conflit. Cette question présente un scénario où l'objectif est de trier les données par date et heure avant de les regrouper par nom.
Comme l'explique l'utilisateur, l'approche standard consistant à utiliser ORDER BY date ASC, heure ASC suivi de GROUP BY nom échoue car GROUP BY doit précéder ORDER BY dans la requête. Pour résoudre ce conflit, la réponse propose deux méthodes alternatives :
Méthode 1 : Sous-requête
La première méthode consiste à utiliser une sous-requête pour obtenir l'ordre souhaité avant le regroupement :
<code class="sql">SELECT * FROM ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) AS sub GROUP BY name</code>
Cette sous-requête crée une table temporaire, sub, qui contient les données triées par date et heure. La requête principale regroupe ensuite cette table temporaire par nom, obtenant ainsi le résultat souhaité.
Méthode 2 : Utilisation d'une expression de table commune (CTE)
Une autre méthode, généralement utilisée avec MySQL versions 8.0 et supérieures, consiste à créer une expression de table commune (CTE) pour effectuer le tri et le regroupement :
<code class="sql">WITH sorted_data AS ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) SELECT * FROM sorted_data GROUP BY name</code>
La CTE, sorted_data, obtient le même résultat que la sous-requête en créant une table temporaire avec les données triées, qui sont ensuite utilisées dans la requête principale pour le regroupement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!