본문 바로가기

[DB]DataBase/[SQL]

[SQLD] GROUP BY, HAVING절

728x90
반응형

GROUP BY절

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

HAVING절

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

문법

GROUP BY절 문법

순서 상 WHERE절을 먼저 수행하고, 원하는 데이터만 필터링 후 GROUP BY절에 의해 그룹 연산을 수행한 뒤 HAVING절에서 만족하는 데이터만 선택하여 출력한다.

 

GROUP BY절과 HAVING절 특징

  • GROUP BY절을 통해 소그룹별 기준을 정한 후, SELECT절에 집계 함수를 사용한다.
  • 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
  • GROUP BY절에서는 SELECT절과는 달리 ALIAS명을 사용할 수 없다.
  • 집계함수는 WHERE절에는 올 수 없다.
    • 집계 함수를 사용할 수 있는 GROUP BY절보다 WHERE절이 먼저 수행된다.
  • WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거한다.
  • HAVING절은 GROUP BY절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
  • GROUP BY절에 의한 소그룹별로 만들어진 집계 데이터 중 HAVING절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
  • HAVING절은 일반적으로 GROUP BY절 뒤에 위치한다.
반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] JOIN 조인  (0) 2024.05.02
[SQLD] ORDER BY절  (1) 2024.04.27
[SQLD] WHERE절  (0) 2024.04.25
[SQLD] 함수  (0) 2024.04.23
[SQLD] SELECT 문  (0) 2024.03.11