> 데이터 베이스 > MySQL 튜토리얼 > SQL의 HAVING과 WHERE: 집계를 위해 언제 각 절을 사용해야 합니까?

SQL의 HAVING과 WHERE: 집계를 위해 언제 각 절을 사용해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-21 09:53:09
원래의
345명이 탐색했습니다.

HAVING vs. WHERE in SQL: When Should I Use Each Clause for Aggregation?

SQL 집계 쿼리에서 HAVING 절과 WHERE 절의 차이점

집계된 데이터로 작업할 때는 HAVING 절과 WHERE 절의 차이점을 이해하는 것이 중요합니다. 이 문서에서는 일반적인 쿼리 시나리오를 자세히 살펴보고 한 메서드는 올바른 결과를 반환하고 다른 메서드는 그렇지 않은 이유를 설명합니다.

쿼리 컨텍스트

다음 표는 다음과 같습니다.

  • 강사(열: LectID, Fname, Lname, 학위)
  • 강사_전문화(열: LectID, 전문 지식)

가장 전문적인 강사를 찾는 것이 목표입니다.

WHERE 절 사용 시도 실패

실패한 쿼리는 WHERE 절을 사용하여 전공 수에 따라 결과를 필터링하려고 시도합니다.

<code class="language-sql">SELECT
  L.LectID, 
  Fname, 
  Lname 
FROM Lecturers L, 
     Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
  COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);</code>
로그인 후 복사

WHERE 절이 집계 값에 조건을 적용하는 데 적합하지 않기 때문에 이 쿼리는 예상한 결과를 생성하지 못했습니다.

HAVING 절을 사용한 쿼리 성공

성공적인 쿼리는 대신 HAVING 절을 사용합니다.

<code class="language-sql">SELECT
  L.LectID,
  Fname,
  Lname 
FROM Lecturers L,
     Lecturers_Specialization S
WHERE L.LectID = S.LectID
GROUP BY L.LectID,
         Fname,
         Lname 
HAVING COUNT(S.Expertise) >= ALL (SELECT
  COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);</code>
로그인 후 복사

HAVING이 성공하는 이유

HAVING 절은 특히 집계 쿼리 결과를 필터링하는 데 사용됩니다. GROUP BY 연산 후 조건을 적용하여 강사별 전공 수를 확인할 수 있습니다.

경험 법칙

일반적으로 GROUP BY 앞에 WHERE를 사용하여 개별 행을 필터링하고, GROUP BY 뒤에 HAVING을 사용하여 집계 결과를 필터링합니다.

ANSI JOIN을 사용하여 향상된 쿼리

ANSI JOIN 구문을 사용하는 대체 쿼리 버전도 제공됩니다.

<code class="language-sql">SELECT  L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
로그인 후 복사

이 버전에서는 조인 조건에 WHERE를 사용하지 않고 대신 JOIN을 사용합니다.

위 내용은 SQL의 HAVING과 WHERE: 집계를 위해 언제 각 절을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿