노력에는 지름길이 없으니까요

윈도우 함수 정리 본문

Python

윈도우 함수 정리

데건 2024. 6. 27. 14:01
728x90

윈도우 함수란?

윈도우 프레임이라는 범위 내부에 포함된 값을 자유롭게 사용

기존에 있던 원래 값은 그대로 두고 집계 값만 추가로 구할 수 있게 함

 

GROUP BY 와 PARTITON BY의 차이

 

 

GROUP BY 절 : 특정 기준으로 데이터를 정의하고자 할 때

집계 함수를 사용하여 기존 행에 있던 값들을 계산한 후 새로운 행에 입력해 줄 수도 있습니다.  집계 함수는 데이터를 하나로 합쳐줍니다. 합치는 과정에서, 우리는 기존의 상세 데이터들을 잃게 됩니다. 집계 함수의 종류는 다양하지만, 그중 가장 많이 사용되는 함수는 COUNT, SUM, AVG, MIN, MAX 함수가 있습니다.

 

 

PARTITON BY 절 : 특정 기준에 한정하여 집계된 값을 계산

PARTITION BY를 사용하면, GROUP BY와는 달리 기존 행의 세세한 정보들은 사라지지 않고 그대로 유지됩니다. 즉, 기존의 데이터와 집계된 값을 함께 나란히 볼 수 있다는 이야기입니다.

 

 

RANK

10위 10위 12위 13위 13위 15위

SELECT
	customer_id,
	price ,
	RANK() OVER (ORDER BY price DESC) R
FROM food_orders fo 
GROUP BY price

 

 

price가 큰 순서대로 정렬 후 순위를 매김

 

 

DENSE_RANK : RANK와 유사하지만 숫자가를 뛰어넘어 순위를 부여하지 않음

10위 10위 11위 12위 12위 13위

SELECT
	customer_id,
	price ,
	DENSE_RANK() OVER (ORDER BY price DESC) R
FROM food_orders fo 
GROUP BY price 

#코드는 다음과 같다. 같은 값이 없는 듯 하여서...
#다음에 테이블 하나 만들어서 확인해보는 걸로

 

 

ROW_NUMBER

각 행에 인덱스 부여

SELECT
	ROW_NUMBER() OVER (),
	customer_id,
	price 
FROM food_orders fo 
GROUP BY price

 

 

NTILE

TILE 함수는 특정한 컬럼의 값을 기준으로 N개의 등급으로 분류하여 주는 함수

SELECT
	NTILE(4) OVER (ORDER BY price),
	COUNT(1) OVER (PARTITION BY customer_id),
	customer_id,
	price 
FROM food_orders fo 
GROUP BY price

 

 

LAG/LEAD

특정 행 이전 혹은 이후의 행을 반환

 

 

 

누적합계 구하기

SELECT
	customer_id,
	price,
	SUM(price) OVER(PARTITION BY customer_id ORDER BY customer_id) "ID별총합", 
	SUM(price) OVER(ORDER BY customer_id) "누적총합",
	SUM(price) OVER() "전체총합"
FROM food_orders fo 
ORDER BY customer_id

 

 

참고한 사이트 : 

https://kimsyoung.tistory.com/entry/GROUP-BY-vs-PARTITION-BY-%EC%9C%A0%EC%82%AC%EC%A0%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90

https://kimsyoung.tistory.com/entry/%EB%8C%80%ED%91%9C%EC%A0%81%EC%9D%B8-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98-6%EA%B0%80%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

 

 

 

 

728x90
반응형

'Python' 카테고리의 다른 글

join 사용법  (0) 2024.07.05
tuple과 SET  (0) 2024.06.28
DFS 총정리  (0) 2024.06.21
제일 작은 수 제거하기 - min을 이용해서 간단히 풀기  (0) 2024.06.18
약수의 합  (0) 2024.06.18