ホームページ >データベース >mysql チュートリアル >グループ化する前に MySQL の結果を並べ替えるにはどうすればよいですか?

グループ化する前に MySQL の結果を並べ替えるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-16 11:14:02394ブラウズ

How to Order MySQL Results Before Grouping?

MySQL: Group By の前に結果を並べ替える

MySQL で結果をグループ化する場合、操作の順序を理解することが重要です。デフォルトでは、MySQL はグループ化された後に結果を並べ替えますが、これは場合によっては望ましい動作ではない可能性があります。

元のクエリと制限

次の点を考慮してください。 query:

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

このクエリは結果を正しくグループ化し、各著者の最新の投稿のみを表示します。ただし、結果はグループ化後に並べ替えられるため、最新の投稿がリストの先頭にあるとは限りません。

HAVING を使用した解決策

結果を並べ替えるにはグループ化する前に、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

HAVING 句は、グループ化後の結果をフィルタリングします。各著者の最大の post_date を持つ行のみが返されるようにします。これにより、最新の投稿がリストの先頭に表示されることが保証されます。

他のデータベースの代替ソリューション

HAVING 句をサポートしていないデータベースを使用している場合 ( Postgres や SQL Server など)、別の解決策は、元のテーブルを、それぞれの最大 post_date を計算するサブクエリと結合することです。著者:

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

以上がグループ化する前に MySQL の結果を並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。