Maison  >  Article  >  base de données  >  Comment trier par date et heure avant de regrouper par nom dans MySQL ?

Comment trier par date et heure avant de regrouper par nom dans MySQL ?

DDD
DDDoriginal
2024-10-30 09:23:27143parcourir

How to Sort by Date and Time before Grouping by Name in MySQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn