집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 MySQL GROUP BY 쿼리가 실패하는 이유는 무엇입니까?
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 ON
은 availables.bookdate
절에 지정된 행 순서를 유지하면서 ORDER BY
의 각 고유 값에 대해 단일 행을 반환합니다. 이는 이 특정 시나리오에서 MySQL의 비표준 GROUP BY
동작을 효과적으로 모방합니다. 이 접근 방식은 ORDER BY
절을 사용하여 각 고유 그룹에 대해 선택되는 행을 정의합니다.
위 내용은 PostgreSQL에서 MySQL GROUP BY 쿼리가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!