집 >데이터 베이스 >MySQL 튜토리얼 >MySQL과 PostgreSQL에서 'GROUP BY' 절이 다르게 작동하는 이유는 무엇입니까?
MySQL과 PostgreSQL GROUP BY
절: 비교
인기 있는 관계형 데이터베이스 시스템인 MySQL과 PostgreSQL은 GROUP BY
절을 다르게 처리합니다. 이 절은 지정된 열을 기준으로 행을 그룹화하여 그룹화된 데이터에 대한 집계 함수 계산을 가능하게 합니다. 주요 차이점을 살펴보겠습니다.
일반적인 시나리오에는 the_table
, col1
및 col2
열이 있는 테이블(예: col3
)이 포함됩니다. MySQL에서 SELECT col2, col3, col1 FROM the_table GROUP BY col2;
과 같은 쿼리는 각 col3
그룹 내의 col1
및 col2
에 대해 임의의 값을 선택하는 것처럼 보이는 결과를 반환할 수 있습니다. 하지만 PostgreSQL에서 동일한 쿼리를 실행하면 오류가 발생합니다.
PostgreSQL 오류가 발생하는 이유는 무엇입니까?
PostgreSQL은 SQL 표준을 엄격하게 준수합니다. 표준에 따르면 SELECT
절에 포함되지 않은 GROUP BY
목록의 모든 열은 집계 함수의 일부여야 합니다. 이 예에서 col3
및 col1
는 이 규칙을 위반합니다.
집계 함수 설명
집계 함수(예: 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
그룹에 대한 col1
및 col2
의 최소값을 찾아 잘 정의된 결과를 제공합니다. MIN()
를 MAX()
, AVG()
등과 같은 다른 집계 함수로 바꾸면 각 그룹에 대해 서로 다른 요약 통계가 제공됩니다. 이 접근 방식은 표준 SQL 준수를 보장하고 MySQL의 비표준 GROUP BY
확장
위 내용은 MySQL과 PostgreSQL에서 'GROUP BY' 절이 다르게 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!