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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 18:04:03865ブラウズ

How to Order Results Before Grouping in MySQL?

Group By 前の MySQL の順序

MySQL では、通常、GROUP BY 句を実行すると、グループが形成された後に結果が順序付けされます。ただし、グループ化する前に結果を並べ替える必要があるシナリオもあります。

次のクエリを考えてみましょう:

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

このクエリは、各著者の最新の投稿を検索し、その投稿をグループ化することを目的としています。結果。ただし、問題は、結果がグループ化前ではなく後に並べ替えられることです。

解決策

グループ化する前に結果を並べ替えるには、次の方法を使用できます。

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 句により、各投稿者の最新の投稿のみが選択されるようになります。

代替ソリューション

Postgres や SQL Server など、HAVING 句が実行できない場合は、次の代替ソリューションを使用できます。

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 までご連絡ください。