본문 바로가기

sqld

2-5) GROUP BY 절과 HAVING 절

GROUP BY 절
  • 각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식
  • GROUP BY 절에 그룹을 지정할 컬럼을 전달 (여러 개 전달 가능)
  • 그룹 연산에서 제외할 대상이 있다면 미리 WHERE 절에서 해당 행을 제외하기!
    • WHERE 절이 GROUP BY 절보다 먼저 수행되기 때문
  • 그룹에 대한 조건은 WHERE절에서 사용할 수 없음
  • SELECT 절에 집계 함수를 사용하여 그룹 연산 결과 표현
  • GROUP BY 절을 사용하면 데이터가 요약되므로 요약되기 전 데이터와 함께 출력할 수 없음
    • 예) 원래 테이블의 10개 행 → GROUP BY로 3개로 요약됨 GROUP BY 결과에 따른 집계 함수 (SUM 등)과 원래 테이블의 컬럼을 함께 출력 불가
    • 개수가 다르기 때문

 

** 문법

 

 

예1) 부서별 (DEPARTMENT_ID) 급여 총합과 급여 평균 출력

 

예2) 직군별 (JOB_ID) 급여 총합과 급여 평균 출력

 

예3) GROUP BY의 잘못된 사용

  • GROUP BY 컬럼과 집계 함수를 사용한 결과만 전달 가능

 

HAVING 절
  • 그룹 함수 결과를 조건으로 사용할 때 사용하는 절
  • WHERE 절을 사용하여 그룹을 제한할 수 없으므로 HAVING 절에 조건 전달
  • HAVING 절이 GROUP BY 절 앞에 올 수는 있지만 뒤에 쓰는 것을 권장
  • 내부적 연산 순서가 SELECT 절보다 먼저이므로 SELECT 절에서 선언된 ALIAS 사용 불가
    • SELECT 절에서 선언된 ALIAS는 ORDER BY 절에서만 사용 가능

 

예1) 그룹 함수 조건을 WHERE 절에 전달하는 경우 에러 발생

 

예2) 그룹 함수 조건 HAVING 절에 전달

 

예3) WHERE 절과 HAVING 절 동시 사용

  • 순서상 HAVING 절보다 WHERE 절이 먼저 수행됨
  • 원하는 데이터를 미리 WHERE 절에서 필터링 한 후 GROUP BY에 의해 그룹 연산 수행, HAVING 절에서 만족하는 데이터만 선택하여 출력
  • WHERE 절에서 필터링 할 수 있는 경우 하는 것이 성능 향상에 좋음

 

 

 

 

 

'sqld' 카테고리의 다른 글

2-7) 조인  (0) 2024.08.21
2-6) ORDER BY 절  (0) 2024.08.21
2-4) WHERE 절  (0) 2024.08.21
2-3) 함수  (0) 2024.08.21
2-2) SELECT 문  (0) 2024.08.20