Oracle

오라클 partition by 간단 설명 및 예제

뽀우맨 2024. 2. 16. 08:31

 

summery용으로 많이 사용하는 over (partition by... 구문.

partition by를 쉽게 설명하면, "구문마다 group by 하여 컬럼에 값을 담는다."로 표현할 수 있겠다.

 

아래에 긴 설명 없이도 쉽게 이해 할 수 있는 쿼리 하나를 적어 본다.

다양하게 이용해 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT   A.이름, A.성별, A.과목, A.점수 
       , MAX(점수) OVER (PARTITION BY 이름) AS 개인별최고점수  
       , AVG(점수) OVER (PARTITION BY 이름) AS 개인별평균점수 
       , SUM(점수) OVER (PARTITION BY 0)  AS 전체점수합계  
       , COUNT(과목) OVER (PARTITION BY 이름) AS 개인별수강과목
       , SUM(점수) OVER (PARTITION BY 성별, 과목) AS 성별과목별점수합계
 
      , 과목 || '_' || ROW_NUMBER() OVER (PARTITION BY 과목 ORDER BY 점수 DESC) AS 과목별등수
 
      , 성별 || '_' || RANK() OVER (PARTITION BY 성별 ORDER BY 점수 DESC) AS 성별등수
FROM
(
SELECT 'A' AS 이름, 'F' AS 성별, 'KOR' AS 과목, 90 AS 점수 FROM DUAL
UNION
SELECT 'A''F''MAT',  95 FROM DUAL
UNION
SELECT 'B''M''KOR',  80 FROM DUAL
UNION
SELECT 'B''M''MAT'100 FROM DUAL
UNION
SELECT 'C''F''KOR',  70 FROM DUAL
UNION
SELECT 'C''F''MAT',  85 FROM DUAL
UNION
SELECT 'D''M''KOR',  90 FROM DUAL
 
) A
ORDER BY A.이름, A.과목
cs