티스토리 뷰
7절 GROUP BY , HAVING
집계함수 (Aggregate Function)
여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수
GROUP BY 절은 행들을 소그룹화
SELECT 절, HAVING 절, ORDER BY 절에 사용
집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행
집계 함수는 WHERE 절에는 올 수 없음 (GROUP BY 절보다 WHERE 절이 먼저 수행)
집계함수명( ALL | DISTINCT 칼럼/표현식 ) -- Default = ALL
주로 숫자 유형에 사용하며 MAX, MIN, COUNT 함수는 문자, 날짜에도 적용 가능
벤더별로 기타 다양한 통계 함수를 제공
- COUNT(*) : NULL 값을 포함한 모든 행의 수를 출력
- COUNT(표현식) : NULL 값인 것을 제외한 행의 수를 출력
- SUM([DISTINCT|ALL] 표현식) : NULL을 제외한 합계 출력
- AVG([DISTINCT|ALL] 표현식) : NULL을 제외한 평균 출력
- MAX([DISTINCT|ALL] 표현식) : 최대값 출력 (문자, 날짜 데이터 사용 가능)
- MIN([DISTINCT|ALL] 표현식) : 최소값 출력 (문자, 날짜 데이터 사용 가능)
- STDDEV([DISTINCT|ALL] 표현식) : 표준 편차를 출력
- VARIAN([DISTINCT|ALL] 표현식) : 분산을 출력
GROUP BY/HAVING
SELECT [DISTINCT] 컬럼명 [AS 별칭] FROM 테이블명
WHERE 조건식
GROUP BY 컬럼명/표현식
HAVING 그룹의 조건식;
FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류
소그룹에 대한 항목별 통계 정보를 얻을 때 추가로 사용
GROUP BY 절
GROUP BY 절은 소그룹별화를 수행하며, SELECT 절에서 집계 함수등을 사용하기 위해 사용
WHERE 절로 전체 데이터를 미리 필터링 한 후에, GROUP BY로 소그룹화 (성능 최적화)
GROUP BY 절에서는 SELECT 절에서 지정한 별칭을 직접 사용할 수 없음
일부 DB에선 자동 정렬이 지원되지만, 원칙적으로 ORDER BY 절을 후에 명시해야 정렬됨
HAVING 절
HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치
HAVING 절은 GROUP BY 절에서 지정한 소그룹의 필터링을 수행하며, 집계함수를 사용할 수 있음
- 여기서 집계함수는 SELECT절에서 사용하지 않았더라도 사용 가능
WHERE 절 조건 변경은 대상 데이터 개수가 변경되므로 결과 데이터 값이 변경 가능성O
HAVING 절 조건 변경은 결과 데이터 변경은 없고 출력되는 레코드 개수만 변경 가능성O
집계 함수와 NULL 처리
집계 함수는 입력 값으로 전체 건수가 NULL 값인 경우만 함수의 결과가 NULL
전체 건수 중에서 일부만 NULL인 경우는 NULL인 행을 연산에서 제외 ( NVL함수를 사용하면 부하 발생 )
CASE 표현 사용시는 ELSE 절을 생략하면 Default 값이 NULL
→ 같은 결과를 얻을 수 있다면 가능한 ELSE 절의 상수값을 지정하지 않거나 ELSE절 생략
Oracle의 DECODE 함수는 4번째 인자 지정하지 않으면 Default 값이 NULL
최종 수정일 : 2025/03/07
틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
'SQL > SQLD 이론' 카테고리의 다른 글
| [SQLD]SQL 기본 : 9절 JOIN (0) | 2025.03.07 |
|---|---|
| [SQLD] SQL 기본 : 8절 ORDER BY (0) | 2025.03.07 |
| [SQLD] SQL 기본 : 6절 함수 (0) | 2025.03.06 |
| [SQLD] SQL 기본 : 5절 WHERE 절 (0) | 2025.03.05 |
| [SQLD] SQL 기본 : 4절 트랜잭션 제어어 (0) | 2025.03.05 |
- Total
- Today
- Yesterday
- BufferedReader
- dialect
- db오브젝트
- 배열
- StringBuilder
- DBMS
- 레코드
- 테이블
- DB
- APS
- 입출력
- BufferedWriter
- db의 역사
- 자료구조
- Scanner
- 필드
- SQL
- Java
- SQL이란
- oracle
- 데이터베이스
- 알고리즘
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |