GROUP BY, HAVING절
2023. 10. 7. 16:33ㆍBOOKS/SQL 전문가 가이드
1. 집계함수
- 여러 행들의 그룹이 모여 그룹당 단 하나의 결과를 돌려주는 함수
- GROUP BY절은 행들을 소그룹화한다.
- SELECT절, HAVING절, ORDER BY절에 사용가능
집계함수 종류
2. GROUP BY절
SELECT [DISTINCT] 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼이나 표현식]
[HAVING 그룹조건식];
- GROUP BY절을 통해 소그룹별 기준을 정한 후 SELECT절에 집계함수 사용
- 집계함수이 통계정보는 NULL값을 가진 행을 제외하고 수행
- GROUP BY절에는 ALIAS명 사용 불가능
- 집계함수는 WHERE절에 올 수 없다.
- WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거
- HAVING절은 GROUP BY절의 기준 항목이나 소그룹의 집계함수를 이용한 조건을 표시가능
- GROUP BY절에 의한 소그룹별로 만들어진 집계 데이터 중 HAVING절에서 제한 조건을 두어 조건을 만족하는 내용만 출력
- HAVING절은 일반적으로 GROUP BY절 뒤에 위치
3. HAVING절
- WHERE절은 GROUP BY절보다 먼저 적용되므로 집계함수를 사용할 수 없음 →HAVING절 사용
- WHERE절 조건에 맞는 데이터들이 GROUP BY절에 의해 그룹화된 후 HAVING절 조건에 맞는 데이터만 출력
- GROUP BY절과 HAVING절 위치 바꾸어도 오류X(ORACLE) But GROUP BY절 뒤에 HAVING절이 오는 것을 권고함
- 가능하면 WHERE절에서 GROUP BY계산 대상을 줄이는 것이 효율적
4. CASE 표현을 활용한 월별 데이터 집계
5. 집계함수와 NULL 처리
- 집계함수는 NULL을 제외하고 계산하므로 NULL을 0으로 표현하기 위해 NVL이나 ISNULL함수를 사용하는 것이 불필요
ex) SUM(NVL(SAL,0)) = SUM(SAL)