2 minute read

Updated:

데이터 분석함수2

데이터 분석 함수로 누적 데이터 출력하기(SUM OVER)

  • 작성법 : sum(컬럼명) over (order by 기준 컬럼)

예제) 직업이 ANALYST, MANAGER인 사원들의 사원번호, 사원이름, 월급, 월급에 대한 누적치를 출력하세요.

select empno, ename, sal, sum(sal) over (order by empno) 누적치
from emp
where job in ('ANALYST','MANAGER');
select empno, ename, sal, sum(sal) over (order by empno rows between unbounded preceding and current row) 누적치
from emp
where job in ('ANALYST','MANAGER');
  • order by절 뒤에 rows between unbounded preceding and current row 은 생략된 것

예제2) 부서번호가 20번인 사원들의 사원번호, 사원이름, 월급, 월급에 대한 누적치를 출력하세요.

select empno, ename, sal, sum(sal) over (order by empno) 누적치
from emp
where deptno=20;

데이터 분석 함수로 비율 출력하기(RATIO_TO_REPORT)

  • 작성법 : ratio_to_report(컬럼명) over()

예제) 부서번호가 20번인 사원들의 사원번호, 이름, 월급, 월급에 대한 비율을 출력하세요.

select empno, ename, sal, round(ratio_to_report(sal) over (), 2) 비율 
from emp
where empno=20;

예제2) 사원 테이블 전체에서 사원번호, 이름, 월급, 월급에 대한 비율을 출력하세요.

select empno, ename, sal, round(ratio_to_report(sal) over (), 2) 비율 
from emp;

데이터 분석 함수로 집계 결과 출력하기1 (ROLLUP)

  • 작성법 : group by절에 rollup(기준 컬럼)

예제) 직업, 직업별 토탈월급을 출력하는데 맨 아래에 다음과 같이 전체 토탈월급을 출력되게 하세요.

select job, sum(sal)
from emp
group by rollup(job);

예제2) 부서번호, 부서번호별 토탈월급을 출력하는데 맨 아래에 전체 토탈월급이 출력되게 하세요.

select deptno, sum(sal)
from emp
group by rollup(deptno);

데이터 분석 함수로 집계 결과 출력하기2 (CUBE)

  • CUBE : 합계를 맨 위에 출력하는 함수이다.

예제) 직업, 직업별 토탈월급을 출력하는데 맨 위에 다음과 같이 전체 토탈월급이 출력되게 하세요.

select job, sum(sal)
from emp
group by cube(job);

예제2) 입사한 년도(4자리), 입사한 년도별 토탈월급을 출력하는데 맨위에 사원 테이블의 전체 토탈월급이 출력되게하세요.

select to_char(hiredate, 'YYYY'), sum(sal) 
from emp
group by cube(to_char(hiredate, 'YYYY'));

데이터 분석 함수로 집계 결과 출력하기(GROUPING SETS)

  • 그룹별로 집계 결과를 한 테이블에 출력하는 함수
  • 작성법 : group by grouping sets(기준컬럼1, 기준컬럼2,… ())

예제1) 직업별 토탈월급과 부서번호별 토탈월급과 전체 토탈월급을 같이 출력하세요.

select deptno, job, sum(sal)
from emp
group by grouping sets ((deptno), (job), ());
  • grouping sets 안에서 괄호()의 역할은 기준 컬럼들이 동시에 묶인 결과를 출력할 지 단일 결과를 출력할 지를 결정하는 중요한 역할을 한다.
  • rollup 함수 대신 grouping sets 함수를 쓸 수 있다. grouping sets 함수가 기준컬럼명을 좀더 직관적으로 쓸 수 있어 더 많이 쓰이는 편이다.

예제2) 입사한 년도(4자리), 입사한 년도(4자리)별 토탈월급과 직업, 직업별 토탈월급을 위아래로 같이 출력하세요.

select  to_char(hiredate, 'YYYY'), job, sum(sal)
from emp
group by grouping sets ((to_char(hiredate, 'YYYY')), (job));

데이터 분석 함수로 출력 결과 넘버링하기(ROW_NUMBER)

  • 작성법 : row_number() over (order by 기준 컬럼)

예제) 부서번호가 20번인 사원들의 사원번호, 사원이름, 월급, 순위를 출력하는 결과 끝에 번호를 넘버링해서 출력하세요.

select empno, ename, sal, rank() over (order by sal desc) as rank,
dense_rank() over (order by sal desc) as dense_rank,
row_number() over (order by sal desc) 번호
from emp
where deptno=20;