You& Data_Science & Life

SQL_11_SubQuery

1. 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 - 책밥