데이터 이야기/SQL
[데이터분석 - SQL ] #3-3. 집합 연산자 / 그룹함수 / 윈도우 함수
sssoing-k
2022. 11. 4. 20:13
1. 집합 연산자
연관된 데이터를 조회하는 방법중 하나로 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식
집합 연산자 사용 상황
- 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합침
- 동일 테이블에서 서로 다른 질의를 수행하여 결과를 합침
- 튜닝 관점에서 실행계획을 분리하고자 하는 목적
사용 제약 조건
- (필수) SELECT 절 컬럼수가 동일
- (옵션) SELECT 절 동일 위치 컬럼의 데이터 타입이 상호 호환 가능할 것
집합 연산자 종류
UNION | 합집합, 중복된 행 하나로 표시 (중복 제거) |
UNION ALL | 합집합, 중복된 행 그대로 표시 |
INTERSECT | 교집합, 중복된 행 하나로 표시 (중복 제거) |
MUNUS / EXCEPT | 차집합, 쿼리1의 결과에서 쿼리2 결과를 제거하고 출력 |
2. 그룹 함수
데이터를 GROUP BY하여 나타낼 수 있는 데이터를 구하는 함수
집계함수 | COUNT, SUM, AVG, MAX, MIN 등 |
소계(총계) 함수 | ROLLUP, CUBE, GROUPING SER 등 |
(1) ROLLUP 함수
GROUP BY의 확장된 형태로 소그룹 간의 소계 및 총계를 계산하는 함수
시간 및 지역처럼 계층적 분류를 포함하고 있는 데이터 집계에 적합
GROUP BY ROLLUP (인수1, 인수2,,,)
ROLLUP (A) | A로 그룹핑 총합계 |
ROLLUP (A, B) | A,B로 그룹핑 A로 그룹핑 총합계 |
ROLLUP (A, B, C) | A,B,C로 그룹핑 A,B로 그룹핑 A로 그룹핑 총합계 |
ex) 날짜별, 주문음료별로 그룹핑 + 날짜별로 그룹핑 + 총합계
(2) CUBE 함수
결합 가능한 모든 값에 대하여 다차원적인 집계를 생성
ROLLUP에 비해 다양한 데이터를 얻는 장점이 있으나 연산 대상이 많아 시스템에 부하를 많이 주는 단점 존재
인수들 간 평등한 관계로 인수의 순서가 바뀌어도 데이터 결과는 같다.
GROUP BY CUBE (인수1, 인수2,,,)
CUBE (A) | A로 그룹핑 총합계 |
CUBE (A, B) | A,B로 그룹핑 A로 그룹핑 B로 그룹핑 총합계 |
CUBE (A, B, C) | A,B,C로 그룹핑 A,B로 그룹핑 A,C로 그룹핑 B,C로 그룹핑 A로 그룹핑 B로 그룹핑 C로 그룹핑 총합계 |
(3) GROUPING SETS 함수
원하는 부분의 소계만 손쉽계 추출 가능
인자값으로 ROLLUP이나 CUBE 사용 가능
GROUP BY GROUPING SETS (인수1, 인수2,,,)
GROUPING SETS (A, B) | A로 그룹핑 B로 그룹핑 |
GROUPING SETS (A, B, ( )) | A로 그룹핑 B로 그룹핑 총합계 |
GROUPING SETS (A, ROLLUP(B)) | A로 그룹핑 B로 그룹핑 총합계 |
GROUPING SETS (A, ROLLUP(B,C)) |
A로 그룹핑 B,C로 그룹핑 B로 그룹핑 총합계 |
2. 윈도우 함수
행과 행간의 관계를 쉽게 정의하기 위해 만든 함수
(1) 순위 함수
RANK | 1,2,2,4,5,5,7 | 순위를 매기면서 같은 순위가 존재하면 존재하는 수만큼 다음 순위를 건너 뜀 |
DENSE_RANK | 1,2,2,3,4,4,5,,, | 순위를 매기면서 같은 순위가 존재하더라도 이어서 순위를 부여 |
ROW_NUMBER | 1,2,3,4,5,6,7,,, | 순위를 매기면서 동일한 값이라도 다른 순위를 부여 |
(2) 집계 함수
SUM | 파티션별 윈도우의 합 | OVER(PARTITION BY 컬럼) AS 컬럼 FROM 테이블 |
AVG | 파티션별 윈도우의 평균값 | |
MAX | 파티션별 윈도우의 최대값 | |
MIN | 파티션별 윈도우의 최소값 |
(3) 그룹 내 행 순서 함수
FIRST_VALUE | 파티션별 윈도우의 최초로 나온 값 |
LAST_VALUE | 파티션별 윈도우의 가장 마지막에 나온 값 |