본문 바로가기
데이터베이스/SQL

SQL 데이터분석함수 SUM OVER, RATIO_TO_REPORT, ROLLUP, CUBE

by ADELA_J 2023. 12. 15.

<SUM OVER>

- 데이터 누적해서 출력

 

▼ 직업이 ANALYST, MANAGER인 사원들의 사원번호, 이름, 월급, 월급 누적치 출력하는 쿼리

 

▶ OVER ( ) - 값을 누적할 윈도우 지정

▷ ORDER BY empno를 통해 사원번호를 오름차순 정렬. 정렬된 것을 기준으로 sal 누적 출력

 

윈도우 기준 윈도우 방식 설명
ROWS UNBOUNDED PRECEDING 맨 첫번째 행 가리킴
UNBOUNDED FOLLOWING 맨 마지막 행 가리킴
CURRENT ROW 현재 행 가리킴

 

▷ Between unbounded preceding and current row는 맨 첫번째부터 현재까지의 값. 

▶ 위 쿼리를 보면

  - BLAKE 누적치JONES + BLAKE

    CLARK 누적치JONES + BLAKE  + CLARK 요런식

 

 

<RATIO_TO_REPORT>

- 특정 컬럼의 데이터의 합을 기준으로 각 로우의 상대적 비율 구하기

 

▼ deptno가 20인 사원들의 사원번호,이름, 월급을 출력하고 본인들의 월급 비율이 어떻게 되는지 출력

 

▽ 원래 이렇게 SUM을 써서 계산 형식으로 할 수 있는 것을 간단하게 RATIO_TO_REPORT 함수로 출력 가능

 

<ROLLUP>

- 데이터를 집계한 결과에 추가적으로 전체 집계를 출력

 

▼ 직업, 직업별 총 월급, 맨 마지막 행에 모든 월급의 총 합

 

▶ 쿼리에 ROLLUP을 붙여주면 추가적으로 데이터 집계 후 출력 가능

▷ 여기서는 JOB을 묶어서 전체 SUM(SAL)을 보여주는 것이기 때문에  GROUP BY 써서 진행

 

 ✅ ROLLUP 을 사용하면 자동적으로 JOB 컬럼이 오름차순이 됨!

 

▼ 만약 ROLLUP을 두개 사용한다면..!?!?!? deptno 과 job 을 한다면.

 

 

▶ ① 결과는 부서 번호별 직업별 총 월급 출력 (deptno, job)

② 결과는 부서 번호별 총 월급 (deptno)

③ 모든 총 월급 () 

 

▷ 위 쿼리를 통해 알 수 있는 것은

DEPTNO(부서) 20에서 10,875로 월급을 제일 많이 받아가고 있고

그 중 ANALYST가 제일 많은 월급을 차지하고 있다.

 

 

<CUBE>

- 데이터를 집계한 결과에 추가적으로 전체 집계를 위쪽에 출력

 

▼ 직업, 직업별 토탈 월급, 첫 번째 row에 총 월급 출력

 

위에서 했던 ROLLUP 과 반대.

 

그런데 다른 점이라면, CUBE에 컬럼을 2개(혹은 그 이상) 했을 때 사용한 쿼리의 결과.

 

위에 ROLLUP했을 때는 3가지 결과가 나왔지만 

CUBE에서는 4가지 결과가 나옴

▶ ① 결과는 총 월급 ( )

② 결과는 직업별 총 월급 (job)

③ 결과는 부서별 총 월급 (deptno) 

④ 결과는 부서내 직업별 총 월급 (job, deptno)

 

▷ ROLLUP에서는 맨 밑에 결과가 출력되어서

ROLLUP 괄호 안에 있던 것들을 하나씩 해결해가는? 제거하는? 느낌이었다면

CUBE는 맨 위에 결과가 출력되어서 하나하나 추가하며 결과 출력하는 느낌이었다.