DB/Oracle
DB 34강. PARTITION BY
JJJAEOoni
2022. 2. 10. 17:19
반응형
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
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형