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