GROUP BY, HAVING 절
💡 집계 함수 Aggregate Function
- 여러 행들의 그룹이 모여서 그룹 당, 단 하나의 결과를 돌려주는 다중행 함수중 하나
- GROUP BY 절은 행들을 소그룹화
- SELECT 절, HAVING 절, ORDER BY 절에 사용
- COUNT, SUM, AVG, MAX, MIN, STDDEV, VARIAN 등
집계 함수명 ( [DISTINCT | ALL] 칼럼이나 표현식 )
- ALL : Default 옵션이므로 생략 가능
- DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션
💡 GROUP BY 절
FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별 통계 정보를 얻을 때 추가로 사용한다
SELECT DISTINCT 칼럼명 ALIAS명
FROM 테이블명
WHERE 조건식
GROUP BY 칼럼/표현식
HAVING 그룹의 조건식;
- GROUP BY 절을 통해 소그룹별 기준을 정한 뒤, SELECT 절에 집계 함수 사용
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행
- 집계 함수는 WHERE 절에는 올 수 없음 (GROUP BY 절보다 WHERE 절이 먼저 수행)
- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거하는 역할
- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을
표시할 수 있음
- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만을 출력
- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치
- GROUP BY 절에서는 ALIAS명을 사용할 수 없다
- 원칙적으로 ORDER BY 절 명시해야 정렬 (일부 DB 과거 버전에서 자동 오름차순 정렬)
💡 HAVING 절
- WHERE 절에는 집계 함수를 사용할 수 없다
- GROUP BY 절보다 HAVING 절을 앞에 사용해도 같은 결과가 나오지만,
논리적으로 순서를 지키는 것을 권고한다.
- 가능하면 WHERE 절에서 조건절을 적용하여 GROUP BY 계산 대상을 줄이는 것이 효과적
- HAVING 절은 SELECT 절에 사용되지 않은 칼럼이나 집계 함수가 아니더라도, GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시 가능
- WHERE 절 조건 변경은 대상 데이터 개수가 변경되므로 결과 데이터 값이 변경 가능성O, HAVING 절 조건 변경은 결과 데이터 변경은 없고 출력되는 레코드 개수만 변경 가능성 O
ORDER BY 절
💡 ORDER BY 절
SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용
SELECT 칼럼명 ALIAS명
FROM 테이블명
WHERE 조건식
GROUP BY 칼럼/표현식
HAVING 그룹조건식
ORDER BY 칼럼/표현식 [ASC|DESC];
- 칼럼명 대신 SELECT 절에서 사용한 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능
- 기본적인 정렬 순서는 오름차순(ASC)이며 SQL 문장의 제일 마지막에 위치
💡 SELECT 문장 실행 순서
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
데이터 전문가 지식포털 참고