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 サイトの他の関連記事を参照してください。