<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는 맨 위에 결과가 출력되어서 하나하나 추가하며 결과 출력하는 느낌이었다.
'데이터베이스 > SQL' 카테고리의 다른 글
SQL 출력되는 행 제한하기 ROWNUM, Simple TOP-n Queries (0) | 2023.12.24 |
---|---|
SQL 데이터분석함수 GROUPING SETS, ROW_NUMBER (0) | 2023.12.18 |
SQL Row를 column으로 출력 SUM+DECODE, PIVOT, UNPIVOT (0) | 2023.12.12 |
SQL NTILE,CUME_DIST,LISTAGG,LAG, LEAD (1) | 2023.11.29 |
SQL 순위출력 RANK, DENSE_RANK (0) | 2023.11.28 |