> 데이터 베이스 > MySQL 튜토리얼 > MySQL GROUP BY 쿼리를 PostgreSQL로 올바르게 마이그레이션하는 방법은 무엇입니까?

MySQL GROUP BY 쿼리를 PostgreSQL로 올바르게 마이그레이션하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-11 08:26:40
원래의
654명이 탐색했습니다.

How to Migrate MySQL GROUP BY Queries to PostgreSQL Correctly?

PostgreSQL과 MySQL의 GROUP BY 문의 차이점

소개

MySQL에서 PostgreSQL로 쿼리를 마이그레이션할 때 GROUP BY 절을 사용할 때 오류가 자주 발생합니다. 이 기사에서는 MySQL과 PostgreSQL의 GROUP BY 간의 차이점을 살펴보고 이 오류를 해결하는 방법을 제공합니다.

오류

PostgreSQL에서 다음 쿼리를 실행하는 경우:

<code class="language-sql">SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at</code>
로그인 후 복사

PostgreSQL은 다음 오류를 반환할 수 있습니다.

<code>ERROR: column "availables.id" must appear in the GROUP BY clause or be used in an aggregate function</code>
로그인 후 복사

차이

MySQL에서 GROUP BY 절을 사용하면 집계되지 않은 특정 필드를 쿼리 결과에 포함할 수 있습니다. 그러나 PostgreSQL은 SQL 표준을 따르며 집계되지 않은 모든 필드는 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다.

해결책: DISTINCT ON

PostgreSQL에서 MySQL의 GROUP BY 동작을 시뮬레이션하려면 DISTINCT ON 표현식을 사용할 수 있습니다. DISTINCT ON을 사용하면 지정된 열을 기반으로 그룹당 고유한 행을 선택할 수 있습니다. 주어진 예에서 다음 쿼리는 PostgreSQL에서 작동합니다.

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate) `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
ORDER BY availables.bookdate, availables.updated_at</code>
로그인 후 복사

이 쿼리는 availables.bookdate의 각 고유 값에 대해 번째 행을 반환하여 MySQL의 GROUP BY 동작을 효과적으로 시뮬레이션합니다. 일관된 결과를 보장하기 위해 availables.updated_at 절에 ORDER BY을 추가하여 DISTINCT ON가 항상 동일한 행을 선택하도록 했습니다. 이것이 없으면 DISTINCT ON는 실행될 때마다 다른 행을 반환할 수 있습니다.

위 내용은 MySQL GROUP BY 쿼리를 PostgreSQL로 올바르게 마이그레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿