>데이터 베이스 >MySQL 튜토리얼 >MySQL의 GROUP BY 절이 집계 함수 없이 예상치 못한 결과를 생성하는 이유는 무엇입니까?

MySQL의 GROUP BY 절이 집계 함수 없이 예상치 못한 결과를 생성하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-08 07:47:09829검색

Why Does MySQL's GROUP BY Clause Produce Unexpected Results Without Aggregate Functions?

MySQL의 GROUP BY 절: 집계 함수가 없으면 예상치 못한 결과

SQL의 GROUP BY 절은 데이터 집계에 필수적입니다. 그러나 SUM 문에서 집계 함수(예: AVG, COUNT, SELECT 등) 없이 사용하면 동작이 직관적이지 않을 수 있으며, 특히 MySQL에서는 더욱 그렇습니다.

예를 들어 설명해 보겠습니다. 직원 데이터가 포함된 emp 테이블을 생각해 보세요.

name dept salary
Jack a 2
Jill a 1
Tom b 2
Fred b 1

다음 쿼리:

<code class="language-sql">SELECT * FROM emp GROUP BY dept;</code>

모든 개별 부서를 검색하는 것을 의미하는 것처럼 보일 수 있습니다. 그러나 MySQL의 출력은 다음과 같습니다.

name dept salary
Jill a 1
Fred b 1

Jill과 Fred가 있고 Jack과 Tom이 아닌 이유는 무엇입니까?

MySQL의 GROUP BY 최적화가 원인입니다. 집계 함수가 없으면 MySQL은 GROUP BY 절에 포함되지 않은 열에 대해 임의의 값을 선택할 수 있습니다. 이 최적화는 그룹화되지 않은 열이 각 그룹 내에서 일관적이라고 가정하여(이 경우에는 잘못됨) 속도를 우선시합니다.

기억해야 할 핵심 사항:

  • 불확실한 결과: 집계 함수 없이 GROUP BY 절에서 열을 생략하면 해당 열에 대한 MySQL의 값 선택이 예측 불가능합니다.
  • 결정적 결과(드물게): 생략된 열이 각 그룹 내에서 동일한 값을 갖는 경우에만 결과가 결정적임을 보장합니다. 실제 시나리오에서는 이런 경우가 거의 없습니다.
  • ORDER BY 결정성을 보장하지 않음: 이 맥락에서 ORDER BY 절을 추가해도 결과가 결정적이지는 않습니다.

간단해 보이는 이 쿼리는 예측 가능하고 신뢰할 수 있는 결과를 보장하기 위해 GROUP BY 절에 집계되지 않은 모든 열을 명시적으로 포함하는 것의 중요성을 강조합니다. 그렇지 않으면 일관성이 없고 오해의 소지가 있는 데이터를 얻을 위험이 있습니다.

위 내용은 MySQL의 GROUP BY 절이 집계 함수 없이 예상치 못한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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