HIT해

[SQL] HAVING 본문

자격증 공부/SQLD

[SQL] HAVING

힛해 2024. 11. 2. 05:59
728x90

HAVING

  1. WHERE 절의 역할:
    • WHERE 절은 개별 행(row)에 대한 필터링을 수행합니다.
    • 데이터베이스가 테이블에서 데이터를 읽을 때 각 행을 평가하여 조건에 맞는 행만 선택합니다.
    • WHERE 절은 GROUP BY 절 이전에 실행됩니다.
  2. 집계함수의 특성:
    • 집계함수(SUM, AVG, COUNT 등)는 여러 행의 데이터를 기반으로 계산됩니다.
    • 이 함수들은 GROUP BY 절 이후에 실행됩니다.
  3. WHERE와 집계함수를 함께 사용할 수 없는 이유:
    • WHERE 절이 실행될 때는 아직 집계함수의 결과가 계산되지 않았습니다.
    • 따라서 WHERE 절에서는 집계함수의 결과를 참조할 수 없습니다.
  4. 해결책 - HAVING 절:
    • HAVING 절은 GROUP BY 이후에 실행됩니다.
    • 따라서 HAVING 절에서는 집계함수의 결과를 사용할 수 있습니다.
    • HAVING은 그룹화된 결과에 대한 필터링을 수행합니다.

예시를 통해 살펴보겠습니다:

-- 잘못된 쿼리
SELECT department, AVG(salary) as avg_salary
FROM employees
WHERE AVG(salary) > 50000-- 이 부분이 문제입니다
GROUP BY department;


-- 올바른 쿼리
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

 

첫 번째 쿼리에서 WHERE 절은 AVG(salary)를 사용할 수 없습니다. 왜냐하면 WHERE 절이 실행될 때 아직 평균 급여가 계산되지 않았기 때문입니다.

 

두 번째 쿼리에서는 HAVING 절을 사용하여 그룹화된 결과에 대해 평균 급여가 50000을 초과하는 부서만 선택합니다.

 

정리하면, WHERE 절은 개별 행에 대한 필터링을, HAVING 절은 그룹화된 결과에 대한 필터링을 수행합니다. 집계함수의 결과를 필터링하려면 HAVING을 사용해야 합니다.

 

집계함수와 같이 여러 행의 데이터가 결합된 데이터를 처리할때는 그룹 뒤에 해빙