데이터 이야기/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 파티션별 윈도우의 가장 마지막에 나온 값