운영체제에서 말하는 윈도우가 아님(리눅스에서 사용못하거나 그런것도 아님)
그냥 특정 범위를 말하는 것이다.
한줄 요약하자면
행들의 서브 집합을 대상으로, 각 행별로 계산을 해서 스칼라(단일 고정)값을
출력하는 함수이다.
그렇다면
느낌상 GROUPING이랑 비슷한가?
SUM, COUNT, AVG 집계함수
이렇게 출력을 한다음에
playerID로 그루핑 할 경우
이렇게 하면
yearId라던가 salary같은 경우는 개개인으로 사용할 수 없고
무조건! 집계함수로만 사용할 수 있었다.
playerId는 GROUP BY 로 되어있어서 SELECT 할 수 있는데
salary같은 경우는 이렇게 꺼내올 수 없었다.
반드시
이렇게 MAX 와같은 집계함수로 SELECT 가능하다.
그런데 경우에 따라서
이런 salary정보와 년도 정보도 함께 분석을 하고싶은 경우가 있을 수 있다.
그럴때 사용하는 것이 "윈도우 함수"이다.
윈도우 함수 ~OVER( [PARTITION][ORDER BY] [ROWS] )
-> 전체 데이터를 연봉 순서로 나열하고, 순위 표기
PARTITION, ROWS말고 ORDER BY부터 써보면
분홍색 함수가 현재 윈도우 함수이다.
ROW_NUMBER() OVER (ORDER BY salary DESC) -> 행번호
RANK() OVER (ORDER BY salary DESC) -> 랭킹 처리 (공동 처리일 경우)
1등 4명이니까 그다음 바로 5등
DENSE_RANK() OVER (ORDER BY salary DESC) -> 랭킹 처리이긴한데
RANK랑 조금 다르다. 공동 1등 두명 다음에 세번째 사람이 2등됨
NTILE(100) OVER (ORDER BY salary DESC) -> 백분율인데
1은 상위 1%를 의미한다.
그렇다면 playerID와 salary별로 그루핑해서 순위를 매길려면 어떻게 해야 할까??
보면은
이것들은 외운다고 외워지는게 아니란다
그나마 자주 사용하는 윈도우 함수가 있는데
LAG(바로 이전), LEAD(바로 다음)
이렇게 사용할 수 있는데
데이터를 보면 이전 salary와 다음 salary를 나타낼 수있음
FIRST_VALUE, LAST_VALUE
FRAME : FRIST~CURRENT
라서
이렇게 하면
worst값이 이상하게 뜬다.
그래서 이렇게하면
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -> 처음부터 나까지
BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -> 나부터 마지막까지
이렇게하면
best, worst잘뜬다.