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

Comment trier les résultats MySQL avant le regroupement ?

Barbara Streisand
Libérer: 2024-11-16 11:14:02
original
394 Les gens l'ont consulté

How to Order MySQL Results Before Grouping?

MySQL : trier les résultats avant de les regrouper par

Lors du regroupement des résultats dans MySQL, il est important de comprendre l'ordre des opérations. Par défaut, MySQL classera les résultats une fois qu'ils ont été regroupés, ce qui peut ne pas être le comportement souhaité dans certains cas.

Requête originale et limitation

Considérez ce qui suit requête :

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
Copier après la connexion

Cette requête regroupe correctement les résultats pour afficher uniquement le dernier message de chaque auteur. Cependant, les résultats sont classés après le regroupement, donc le dernier message ne se trouve pas nécessairement au début de la liste.

Solution utilisant HAVING

Pour commander les résultats avant le regroupement, nous pouvons utiliser la clause HAVING :

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
Copier après la connexion

La clause HAVING filtre les résultats après le regroupement, garantissant que seules les lignes avec la post_date maximale pour chaque auteur sont renvoyés. Cela garantit que le dernier message est affiché au début de la liste.

Solution alternative pour d'autres bases de données

Si vous utilisez une base de données qui ne prend pas en charge la clause HAVING ( comme Postgres ou SQL Server), une solution alternative consiste à joindre la table d'origine avec une sous-requête qui calcule la post_date maximale pour chaque auteur :

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal