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 절을 사용하면 그룹화하기 전에 각 작성자의 최신 게시물만 선택됩니다.
대체 솔루션
HAVING 절이 실현 가능하지 않은 경우(예: Postgres 또는 SQL Server) 다음 대체 솔루션을 사용할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!