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 중국어 웹사이트의 기타 관련 기사를 참조하세요!