>데이터 베이스 >MySQL 튜토리얼 >MySQL과 PostgreSQL에서 'GROUP BY' 절이 다르게 작동하는 이유는 무엇입니까?

MySQL과 PostgreSQL에서 'GROUP BY' 절이 다르게 작동하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-18 09:41:10520검색

Why Does a `GROUP BY` Clause Work Differently in MySQL and PostgreSQL?

MySQL과 PostgreSQL GROUP BY 절: 비교

인기 있는 관계형 데이터베이스 시스템인 MySQL과 PostgreSQL은 GROUP BY 절을 다르게 처리합니다. 이 절은 지정된 열을 기준으로 행을 그룹화하여 그룹화된 데이터에 대한 집계 함수 계산을 가능하게 합니다. 주요 차이점을 살펴보겠습니다.

일반적인 시나리오에는 the_table, col1col2 열이 있는 테이블(예: col3)이 포함됩니다. MySQL에서 SELECT col2, col3, col1 FROM the_table GROUP BY col2;과 같은 쿼리는 각 col3 그룹 내의 col1col2에 대해 임의의 값을 선택하는 것처럼 보이는 결과를 반환할 수 있습니다. 하지만 PostgreSQL에서 동일한 쿼리를 실행하면 오류가 발생합니다.

PostgreSQL 오류가 발생하는 이유는 무엇입니까?

PostgreSQL은 SQL 표준을 엄격하게 준수합니다. 표준에 따르면 SELECT 절에 포함되지 않은 GROUP BY 목록의 모든 열은 집계 함수의 일부여야 합니다. 이 예에서 col3col1는 이 규칙을 위반합니다.

집계 함수 설명

집계 함수(예: MIN, MAX, AVG, SUM, COUNT)는 여러 행에서 단일 값을 계산합니다. 그룹화된 데이터를 요약하는 데 필수적입니다.

MySQL의 비표준 동작

MySQL의 동작은 표준에서 벗어났습니다. GROUP BY 절에 없는 집계되지 않은 열을 선택할 수 있지만 이는 신뢰할 수 없습니다. 이러한 열에 대해 선택된 값은 예측할 수 없으며 데이터베이스의 내부 작동에 따라 달라집니다. 일관성이 보장되지는 않습니다.

표준 준수 쿼리

두 데이터베이스에서 일관되고 예측 가능한 결과를 보장하려면 항상 GROUP BY 절에 없는 열에 대해 집계 함수를 사용하세요. 다음 쿼리는 MySQL과 PostgreSQL 모두에서 올바르게 작동합니다.

<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;</code>

이 쿼리는 MIN()을 사용하여 각 col3 그룹에 대한 col1col2의 최소값을 찾아 잘 정의된 결과를 제공합니다. MIN()MAX(), AVG() 등과 같은 다른 집계 함수로 바꾸면 각 그룹에 대해 서로 다른 요약 통계가 제공됩니다. 이 접근 방식은 표준 SQL 준수를 보장하고 MySQL의 비표준 GROUP BY 확장

에 내재된 모호성을 방지합니다.

위 내용은 MySQL과 PostgreSQL에서 'GROUP BY' 절이 다르게 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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