Loading...

DB/Oracle / / 2022. 2. 10. 17:19

DB 34강. PARTITION BY

반응형

UNION ALL을 이용해

각 부서별 월급 순위를 매긴다.

 

그룹별로 통계를 내는 통계 쿼리를 만들어보자.

-- UNION ALL은 컬럼 개수가 같아야 합칠 수 있음
-- ROLL UP
SELECT deptno, sal, rank() OVER (ORDER BY sal DESC) 
FROM emp
WHERE deptno = 10
UNION ALL
SELECT null, sum(sal), null
FROM emp
WHERE deptno = 10
UNION ALL
SELECT deptno, sal, rank() OVER (ORDER BY sal DESC) 
FROM emp
WHERE deptno = 20
UNION ALL
SELECT null, sum(sal), null
FROM emp
WHERE deptno = 20
UNION ALL
SELECT deptno, sal, rank() OVER (ORDER BY sal DESC) 
FROM emp
WHERE deptno = 30
UNION ALL
SELECT null, sum(sal), null
FROM emp
WHERE deptno = 10
UNION ALL
SELECT null, sum(sal), null
FROM emp;

 

코드가 매우 지저분하다.

 

PARTITION BY를 이용하면

긴 UNION ALL을

한 줄로 정리할 수 있다.

-- PARTITION BY (그룹핑) 오라클만 가지고 있음!
SELECT deptno, sal, rank() OVER (PARTITION BY deptno ORDER BY sal DESC) 부서별순위
FROM emp;

PARTITION BY의 원리는 무엇일까?

 

PARTITION BY deptno로 그룹핑

-> ORDER BY sal DESC로 정렬

-> rank() OVER로 rownum 붙인것이다.

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형