2과목. SQL 기본 및 활용
2장. SQL 활용
4절. 윈도우 함수
# 윈도우 함수(WINDOW FUNCTION)
- 서로 다른 행의 비교나 연산을 위해 만든 함수
- GROUP BY 를 쓰지 않고 그룹 연산 가능
- LAG, LEAD, SUM, AVG, MIN, MAX, COUNT, RANK
- 문법
SELECT 윈도우함수([대상]) OVER ([PARTITON BY 컬럼]
[ORDER BY 컬럼 ASC | DESC]
[ROWS | RANGE BETWEEN A AND B]);
* PARTITION BY절: 출력할 총 데이터 수 변화 없이 그룹연산 수행할 GROUP BY 컬럼
* ORDER BY 절
➢ RANK 의 경우 필수(정렬 컬럼 및 정렬 순서에 따라 순위 변화)
➢ SUM, AVG, MIN, MAX, COUNT 등은 누적값 출력 시 사용
* ROWS | RANGE BETWEEN A AND B
➢ 연산 범위 설정
➢ ORDER BY 절 필수
# 그룹 함수의 형태
- SUM, COUNT, AVG, MIN, MAX 등
- OVER 절을 사용하여 윈도우 함수로 사용 가능
- 반드시 연산할 대상을 그룹함수의 입력값으로 전달
- 문법
SELECT SUM(대상) OVER([PARTITION BY 컬럼]
[ORDER BY 컬럼 ASC | DESC]
[ROWS | RANGE BETWEEN A AND B]);
- 종류
① SUM OVER()
- 전체 총 합, 그룹별 총 합 출력 가능
② AVG OVER()
- SUM과 동일하게 사용
③ MIN/MAX OVER()
- SUM과 동일하게 사용
④ COUNT
- SUM과 동일하게 사용
# 윈도우 함수의 연산 범위는 집계 연산 시 행의 범위 설정 가능함
- ROWS, RANGE 차이
· ROWS: 값이 같더라도 각 행씩 연산
· RANGE: 같은 값의 경우 하나의 RANGE로 묶어서 연산(DEFAULT)
- BETWEEN A AND B
· 시작점 정의
➢ CURRENT ROW: 현재행부터
➢ UNBOUNDED PRECEDING: 처음부터(DEFAULT)
➢ N FOLLOWING: N 이후까지
· 마지막 시점 정의
➢ CURRENT ROW: 현재행까지(DEFAULT)
➢ UNBOUNDED FOLLOWING: 마지막
➢ N FOLLOWING: N 이후까지
# 순위 관련 함수
- RANK(순위)
· RANK WITHIN GROUP
➢ 특정값에 대한 순위 확인
➢ 윈도우함수가 아닌 일반함수
· RANK() OVER()
➢ 전체 중/특정 그룹 중 값의 순위 확인
➢ ORDER BY 절 필수
➢ 순위를 구할 대상을 ORDER BY 절에 명시(여러 개 나열 가능)
➢ 그룹 내 순위 구할 시 PARTITION BY 절 사용
· DENSE_RANK
➢ 누적 순위
➢ 값이 같을 때 동일한 순위 부여 후 다음 순위가 바로 이어지는 순위 부여 방식
ex) 1등이 5명이라도 그 다음 순위가 2등임(값이 같으면 동일 순위)
· ROW_NUMBER
➢ 연속된 행 번호
➢ 동일한 순위를 인정하지 않고 단순히 순서대로 나열한대로의 순서 값 리턴
# LAG, LEAD
- 행 순서대로 각각 이전 값(LAG), 이후 값(LEAD) 가져오기
- ORDER BY 절 필수
- 문법
SELECT LAG(컬럼,
N)
OVER([PARTITION BY 컬럼]
ORDER BY 컬럼 ASC | DESC);
# FIRST_VALUE, LAST_VALUE
- 정렬 순서대로 정해진 범위에서의 처음 값, 마지막 값 출력
- 순서와 범위 정의에 따라 최솟값과 최댓값 리턴 가능
# NTILE
- 행을 특정 컬럼 순서에 따라 정해진 수의 그룹으로 나누기 위한 함수
- 그룹 번호가 리턴됨
- ORDER BY 필수
- PARTITION BY 를 사용하여 특정 그룹을 또 원하는 수만큼 그룹 분리 가능
- 문법
SELECT NTILE(N) OVER ([PARTITION BY 컬럼]
ORDER BY 컬럼 ASC | DESC);
# 비율관련 함수
① RATIO_TO_REPORT
- 각 값의 비율 리턴(전체 비율 또는 특정 그룹 내 비율 가능)
- ORDER BY 사용 불가
- 문법
RATIO_TO_REPORT(대상) OVER([PARTITION BY …]);
② CUME_DIST: 누적비율
- 각 값의 누적 비율 리턴(전체 비율 또는 특정 그룹 내 비율 가능
- ORDER BY 필수(누적 비율을 구하는 순서를 정할 수 있음)
- 문법
CUME_DIST() OVER([PARTITION BY 컬럼]
ORDER BY 컬럼);
③ PERCENT_RANK
- PERCENTILE(분위수) 출력
- 전체 COUNT 중 상대적 위치 출력(0~1 범위 내)
- ORDER BY 필수
- 문법
PERCENT_RANK() OVER ([PARTITION BY …]
ORDER BY …]);
'🖊️Certificate > 📌SQLD' 카테고리의 다른 글
[SQLD] 2과목 - 2장) 6절. 계층형 질의와 셀프 조인 (0) | 2024.03.07 |
---|---|
[SQLD] 2과목 - 2장) 5절. Top N 쿼리 (0) | 2024.03.07 |
[SQLD] 2과목 - 2장) 3절. 그룹 함수 (0) | 2024.03.07 |
[SQLD] 2과목 - 2장) 2절. 집합 연산자 (0) | 2024.03.07 |
[SQLD] 2과목 - 2장) 1절. 서브 쿼리 (0) | 2024.03.07 |
댓글