Maison >base de données >tutoriel mysql >Comment trier les résultats avant de les regrouper dans MySQL ?

Comment trier les résultats avant de les regrouper dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-11 18:04:03938parcourir

How to Order Results Before Grouping in MySQL?

Ordre MySQL avant Group By

Dans MySQL, l'exécution d'une clause GROUP BY classe normalement les résultats une fois les groupes formés. Cependant, il existe des scénarios dans lesquels vous souhaitez trier les résultats avant de les regrouper.

Considérez la requête suivante :

SELECT wp_posts.*
FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
ORDER BY wp_posts.post_date DESC

Cette requête vise à trouver le dernier article de chaque auteur, puis à regrouper les résultats. Cependant, le problème est qu'il trie les résultats après le regroupement, pas avant.

Solution

Pour trier les résultats avant le regroupement, vous pouvez utiliser l'approche suivante :

SELECT wp_posts.*
FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date)
ORDER BY wp_posts.post_date DESC

La clause HAVING garantit que seul le dernier article de chaque auteur est sélectionné avant regroupement.

Solution alternative

Dans les cas où la clause HAVING n'est pas réalisable, comme dans Postgres ou SQL Server, vous pouvez utiliser la solution alternative suivante :

SELECT
    wp_posts.*
FROM
    wp_posts
JOIN
    (
        SELECT
            g.post_author,
            MAX(g.post_date) AS post_date
        FROM wp_posts AS g
        WHERE
            g.post_status='publish'
            AND g.post_type='post'
        GROUP BY g.post_author
    ) AS t
    ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
ORDER BY wp_posts.post_date

Cette requête utilise une sous-requête pour trouver la date de publication maximale pour chaque auteur, puis la joint à la table d'origine pour récupérer la publication réelle enregistrements.

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