MySQL Order before Group By
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!