MySQL で GROUP BY 句の後に ORDER BY 句が適用されるのはなぜですか?

DDD
リリース: 2024-11-13 00:20:02
オリジナル
832 人が閲覧しました

Why is the ORDER BY Clause Applied After the GROUP BY Clause in MySQL?

Group By の前の MySQL の順序

MySQL では、ORDER BY 句と GROUP BY 句の両方を含むクエリを実行するときに注意することが重要です。 ORDER BY 句が 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
ログイン後にコピー

このクエリは、各著者の最新の投稿を取得し、結果を著者ごとにグループ化することを目的としています。ただし、ORDER BY 句は GROUP BY 句の後に適用されるため、グループ化が行われた後に結果が並べ替えられます。

解決策:

これに対処するには

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
ORDER BY wp_posts.post_date DESC
GROUP BY wp_posts.post_author
ログイン後にコピー

この修正されたクエリでは、作成者によるグループ化を実行する前に、まず投稿日による降順で結果を並べ替えます。その結果、各作成者の最新の投稿が取得され、結果セットの最初に配置されます。

代替ソリューション (MySQL 以外のデータベースの場合):

In SQL Server や PostgreSQL など、グループ化前の順序付けをサポートしていないデータベースの場合は、代替ソリューションを使用できます。

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
ログイン後にコピー

このクエリは、サブクエリを使用して各著者の最大投稿日を特定し、これを結合します。結果セットをメインの wp_posts テーブルで使用して、実際の投稿データを取得します。このソリューションでは、同じ日付に複数の投稿がある著者に対して複数の行が返される場合があるため、特定の要件に応じて追加のフィルタリングが必要になる場合があることに注意してください。

以上がMySQL で GROUP BY 句の後に ORDER BY 句が適用されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート