윈도우 함수
- 조인, 서브쿼리 없이 행과 행간 비교, 연산하게 해줌
- 각 행 유지하며 연산 가능 (GROUP BY 안해도 OK)
SELECT 컬럼,
윈도우 함수(컬럼) OVER (정렬 또는 조건) AS 결과
FROM 테이블명;
- 윈도우 함수 안에 집계, 순위 함수 같은 걸 넣는다.
- PARTITION BY : 그룹 연산 수행할 그룹 지정
- ORDER BY : 순위 함수 쓸 거면 필수. 집계함수에서는 누적값 출력할 때 쓴다.
- ROWS, RANGE BETWEEN A AND B : 연산 범위 설정. OREDER BY랑 같이 씀. (RANGE는 SQL SERVER는 사용 불가)
- 순서 틀리면 오류 난다
일반 집계 함수
- SUM, AVG, COUNT, MAX, MIN 등의 함수를 사용할 수 있다.
- OREDER BY가 없을 경우 합은 누적으로 계산하지 않는다.
-> 전부 같은 값으로 나온다는 소리
연산 범위 설정
순위 함수
- ROW_NUMBER() : 1위부터 순차적으로 순위 부여
- RANK() : 동일 값에 같은 순위 부여 (그 다음은 건너 뜀)
-> 1,2,2,4 ...
- DENSE_RANK() : 동일 값에 같은 순위
-> 1,2,2,3,4...
+) 특정 값의 순위 구하기
SELECT RANK(값) WITHIN GROUP(ORDER BY 컬럼);
행 순서 관련 함수
LAG, LEAD
- 둘다 SQL SERVER는 사용 불가
- OREDER BY 필수
- LAG : 이전 행 값 가져오기
- LEAD : 이후 행 값 가져오기
- 가져올 값이 없으면 null
-> LAG(컬럼, 가져올 값, null 대체 값)으로 null 대체 가능
FIRST_VALUE, LAST_VALUE
- 정렬된 범위내 첫번째, 마지막 리턴
- PARTITON, ORDER BY 생략 가능
NTILE(N)
- 행을 N개의 그룹으로 나눔
- ORDER BY 필수
- SQL SERVER에서는 사용 불가
- 나눠지지 않으면 앞 그룹이 더 커짐
-> NTILE(2) OVER(ORDER BY NAME) AS GROUP_NAME 했는데 행이 5개면 3, 2 분할
비율 관련 함수
RATION_TO_REPORT
- 파티션 내 전체 합에 대한 한 컬럼의 비율
- 파티션이 없으면 전체에 대한 비율
- OREDER BY 불가
PERCENT_RANK
- 파티션 별 윈도우에서 행의 순서별 백분위 리턴 (0:가장 먼저, 1: 가장 나중)
- ORDER BY 필수
CUME_DIST
- 파티션 별 윈도우에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율
-> 5개중 2번째는 0.2