개발정리

OVER와 PARTITION BY 에 대하여 본문

CS/SQL

OVER와 PARTITION BY 에 대하여

coffee. 2024. 12. 25. 21:14

최근 SQL문제를 풀어보다가 분석함수(순위함수,집계함수)를 사용할 때 GROUP BY를 사용하지 않고 OVER 와 PARTITION BY를 사용해 쿼리를 효율적으로 작성하는 경우를 봤습니다.오늘을 OVER와 PARTION BY에대해 알아보겠습니다.

 

다음은 예시 테이블입니다

판매일 판매원 상품 판매금액
2024-01-01 A 상품1 1000
2024-01-01 A 상품2 1500
2024-01-01 B 상품1 2000
2024-01-02 A 상품3 2500
2024-01-02 B 상품2 3000
2024-01-02 B 상품3 3500

 

일단 GROUP BY를 먼저 써보자!

GROUP BY는 데이터 집합을 특정 컬럼을 기준으로 그룹화 한 후 , 각 그룸에 대해 집계 함수를 적용합니다.

SELECT 판매원, SUM(판매금액) AS 총판매금액
FROM 판매데이터
GROUP BY 판매원;

 

결과:

판매원 총판매금액
A 5000
B 10500

 

결과가 그룹화 되어 하나의 결과 집합을 반환 하게 됩니다.

 

OVER를 사용한 방법

OVER를 사용하면 집계함수가 그룹화 되지 않고, 전체 데이터에 대해 계산됩니다.

이때 PARTITION BY를 사용하여 특정 컬럼을 기준으로 데이터를 나눕니다.

GROUP BY와 비슷하다고 생각하시면 됩니다.

 

SELECT 판매일,판매원,상품,판매금액,
	SUM(판매금액) OVER (PARTITION BY 판매원) AS 판매원별총판매금액
 FROM 판매데이터;

 

결과:

판매일 판매원 상품 판매금액 판매원별총판매금액
2024-01-01 A 상품1 1000 5000
2024-01-01 A 상품2 1500 5000
2024-01-01 B 상품1 2000 10500
2024-01-02 A 상품3 2500 5000
2024-01-02 B 상품2 3000 10500
2024-01-02 B 상품3 3500 10500

 

OVER 와 POARTITION BY를 사용한 결과는 그룹화 되지 않고 각 행에 대한 결과가 출력됩니다.

 

 

'CS > SQL' 카테고리의 다른 글

[오라클] dual테이블에 대해서  (0) 2025.04.16
오라클 PL/SQL 알아보기  (0) 2025.04.13
오라클 paraller 문  (0) 2025.03.05
SELECT FOR UPDATE문  (0) 2025.03.04
[오라클] MERGE 문  (0) 2025.03.02