>  기사  >  데이터 베이스  >  MySQL에서 GROUP BY 절 다음에 ORDER BY 절이 적용되는 이유는 무엇입니까?

MySQL에서 GROUP BY 절 다음에 ORDER BY 절이 적용되는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-13 00:20:02830검색

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

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.