>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 MySQL GROUP BY 쿼리가 실패하는 이유는 무엇입니까?

PostgreSQL에서 MySQL GROUP BY 쿼리가 실패하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-11 07:36:43157검색

Why Does My MySQL GROUP BY Query Fail in PostgreSQL?

PostgreSQL과 MySQL: GROUP BY 절 비교

MySQL 쿼리를 PostgreSQL로 마이그레이션하면 "'XYZ' 열은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다."라는 오류가 발생할 수 있습니다. 이러한 불일치는 이러한 데이터베이스가 GROUP BY

을 처리하는 방식에서 비롯됩니다.

MySQL의 비표준 접근 방식

MySQL의 GROUP BY 구현은 SQL 표준에서 벗어납니다. GROUP BY 절에 명시적으로 나열되지 않은 열을 선택할 수 있으므로 예측할 수 없는 출력이 발생합니다. 각 그룹에서 선택한 행은 인덱싱 및 쿼리 최적화와 같은 요소의 영향을 받아 암시적으로 결정됩니다.

PostgreSQL의 표준 준수 GROUP BY

그러나 PostgreSQL은 SQL 표준을 엄격하게 준수합니다. SELECT 목록의 모든 열은 GROUP BY 절에 포함되거나 집계 함수(예: SUM, AVG, COUNT)의 일부여야 합니다. 그렇지 않으면 앞서 언급한 오류가 발생합니다.

PostgreSQL에서 MySQL 동작 복제

PostgreSQL의 접근 방식은 더 예측 가능하고 표준을 준수하지만 DISTINCT ON을 사용하여 MySQL의 비표준 동작을 시뮬레이션할 수 있습니다. 다음 PostgreSQL 쿼리는 이를 보여줍니다.

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate)
availables.*,
rooms.hotel_id
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.updated_at;</code>

DISTINCT ONavailables.bookdate 절에 지정된 행 순서를 유지하면서 ORDER BY의 각 고유 값에 대해 단일 행을 반환합니다. 이는 이 특정 시나리오에서 MySQL의 비표준 GROUP BY 동작을 효과적으로 모방합니다. 이 접근 방식은 ORDER BY 절을 사용하여 각 고유 그룹에 대해 선택되는 행을 정의합니다.

위 내용은 PostgreSQL에서 MySQL GROUP BY 쿼리가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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