SQL_11_SubQuery
20 Aug 2023 SQL1. Window
1) LEAD / LAG
- LEAD : N줄 밀리기
- LAG : N줄 당겨오기
-- LEAD LEAD([타겟필드명], [당길 N줄수]) OVER (ORDER BY 컬럼) LEAD([타겟필드명], [당길 N줄수]) OVER (PARTITION BY 컬럼 ORDER BY 컬럼) -- LAG LAG([타겟필드명], [밀 N줄수]) OVER (ORDER BY 컬럼) LAG([타겟필드명], [밀 N줄수]) OVER (PARTITION BY 컬럼 ORDER BY 컬럼)
2) RANK / DENSE_RANK / ROW_NUMBER
- RANK : 동일한 순위일 경우, 동일한 순위를 매기고, 다음 순위는 N개만큼 건너뜀
- DENSE_RANK : 동일한 순위일 경우, 동일한 순위를 매기고, 다음 순위는 직전순위 + 1
- ROW_NUMBER : 동일한 순위라도, 서로 다른 순위를 매김
RANK() OVER (PARTITION BY 컬럼 ORDER BY 컬럼)
DENSE_RANK() OVER (PARTITION BY 컬럼 ORDER BY 컬럼)
ROW_NUMBER() OVER (PARTITION BY 컬럼 ORDER BY 컬럼)
3) FRAME_1 : 이동 평균
- [n] preceding : 현재 로우를 기준으로 위 n줄 집계 -> 이동평균
- [n] following : 현재 로우를 기준으로 위 n줄 집계
AVG([타겟필드명]) OVER(ORDER BY [정렬컬럼] ROWS BETWEEN 2 PRECEDING) -- 오늘 포함 이전 3일 평규
AVG([타겟필드명]) OVER(ORDER BY [정렬컬럼] ROWS BETWEEN 2 FOLLOWING) -- 오늘 포함 이후 3일 평균
AVG([타겟필드명]) OVER(ORDER BY [정렬컬럼] ROWS BETWEEN 1 PRECEDING and 1 FOLLOWING) -- 오늘 포함 이전 1일 ~ 이후 1일 평균
4) FRAME_2 : 누적합
- [n] unbounded preceding : 현재 로우를 기준으로 이전 모든 줄 집계 -> 누적합
- [n] unbounded preceding : 현재 로우를 기준으로 위 n줄 집계 -> 이동평균
SUM([타겟필드명]) OVER(ORDER BY [정렬컬럼] ROWS UNBOUNDED PRECEDING) -- 오늘 포함 과거 모든 일자 합계
Reference
- 칼퇴족 김대리는 알고 나만 모르는 SQL - 책밥