윈도우 함수

CJB_ny·2022년 4월 2일
0

DataBase

목록 보기
21/29
post-thumbnail

운영체제에서 말하는 윈도우가 아님(리눅스에서 사용못하거나 그런것도 아님)

그냥 특정 범위를 말하는 것이다.

한줄 요약하자면

행들의 서브 집합을 대상으로, 각 행별로 계산을 해서 스칼라(단일 고정)값을
출력하는 함수이다.

그렇다면

느낌상 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잘뜬다.

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글