본문 바로가기

나 취준생/SQL

SQL - 데이터 분석 함수 2

320x100

1. 데이터를 누적해서 합계하는 데이터 분석 함수 ( SUM_OVER )


SUM( 컬럼명 ) OVER ( order by 컬럼명 desc or asc )


예제: 사원번호, 이름, 월급, 월급의 누적치를 출력하기


select   empno, ename, sal,  sum(sal)  over ( order  by  empno  asc) 누적치

    from   emp; 

맨 오른쪽에 누적치가 점점 쌓이는 것을 확인.


over가 보이면 감이 올 것이다.

물론 다른 함수들과 마찬가지로 partition by를 사용할 수 있다.


예제: 직업, 월급, 직업별 총합 누적치를 출력하기


select  job,  ename, sal,  sum(sal)  over  (  partition  by  job 

                                                       order  by  ename  )  누적치

   from  emp;




2.  비율을 출력하는 데이터 분석 함수 (RATIO_TO_REPORT)


전체 데이터 중에서 비율이 어떻게 되는지 확인하는 함수


예제 : 직업이 SALESMAN인 사원들의 월급의 비율을 각각 출력하기


select  ename, sal, round( ratio_to_report(sal)  over() ,2 )   as  비율

            from   emp

            where  job='SALESMAN' ;



3. 집계 결과 출력하는 데이터 분석 함수 ( ROLLUP )


집계한 결과를 맨 아래쪽에 출력하고 싶을 때 사용하는 함수


예제 : 부서별 월급의 총합을 출력하고, 전체 인원의 월급의 총합도 맨 밑에 출력하기


사용 방법은 일반적으로 GROUP BY를 실행하고, 컬럼명 앞에 ROLLUP을 쓰고 괄호로 감싸준다.


select  deptno, sum(sal)

  from  emp

  where deptno is not null

  group by rollup(deptno);


4. 집계 결과 출력하는 데이터 분석 함수 ( CUBE )


집계 결과를 위쪽에 출력하는 함수


사용 방법도 ROLLUP과 같고, 차이점은 밑이 아니라 맨 위에 총합을 출력한다는 것뿐이다.


select  job, sum(sal)

  from  emp

  where job is not null

  group  by  cube( job );



5.집계 결과 출력하는 데이터 분석 함수 ( GROUPING SETS )


GROUPING SETS는 여러 그룹핑 쿼리를 함께 표현하기 편하다.



이렇게 하면 같은 직업이라도 mgr, 부서 번호에 따라 각각 카운트 된다.


grouping sets로 rollup과 동일하게 할 수 있다.

중복되지 않는 empno와 ename을 grouping sets로 묶으면, 각각 sum이 되더라도 개체값으로 나오고,

마지막으로 () 을 넣어서, 전체 토탈 월급을 출력한다.


select  empno, ename, sum(sal)

   from   emp

   group  by grouping sets((empno,ename),());





반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - 테이블 조인 2  (0) 2020.11.07
SQL - 테이블 조인  (0) 2020.11.07
SQL - 컬럼을 ROW로 출력하기  (0) 2020.11.05
SQL - listagg, lag, lead  (0) 2020.11.05
SQL - 데이터 분석 함수 1  (0) 2020.11.05