본문 바로가기

나 취준생/SQL

SQL - 데이터 분석 함수 1

320x100

데이터 분석 함수 :  데이터 분석을 용이하게 하기 위해서 제공하는 함수 



1. 순위를 출력하는 함수 1( RANK )



예제: 이름, 월급, 월급에 대한 순위를 출력하기


 select ename, sal, rank()  over ( order  by  sal  desc) as 순위

   from  emp;


예제 : 직업, 이름, 월급,  순위를 출력하는데 [[직업별로]] 각각 월급이 높은 순서대로 순위를 출력하기


 select   job,  ename, sal,  rank()  over ( order by  sal desc )  as 순위

   from emp 

   group by job;



-- GROUP BY 표현식이 아닙니다 ㅠ


rank 함수에는 group by 말고 partition by 를 사용해야 한다.


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

                                                    order  by sal desc )  as  순위

  from  emp;




partition by 는 데이터 분석함수에서 괄호 안에 쓰는 문법으로

partition by job 이라고 하면 직업 별로 각각 파티션해서 나누겠다는 것이다. 


그래서 아래의 뜻은 

rank()  over  (  partition   by   job   <-- 직업별로 파티션해서 

                   order  by  sal desc )  <-- 월급이 높은 순서로 순위를 출력하겠다. 가 된다.


2. 순위를 출력하는 함수 2 ( DENSE_RANK )


 select   job,  ename, sal, 

 rank() over ( order by sal desc )  as  순위,

 dense_rank() over ( order by sal desc )  as  순위2

   from emp ;


순위는 rank()를 사용했고, 순위2는 dense_rank()를 사용했는데, 약간의 차이가 있다. 무엇일까?


같은 순위가 여러개 나오면 다음 순위가 그 다음 순위가 중복된 수만큼 더해서 출력되는것이 rank 이고

중복되었더라도 그냥 바로 그 다음 순위가 나오는게 dense_rank() 이다.

3등이 2명이었다면 rank는 5위부터 나오지만, dense_rank는 4위부터 나온다.


3. 등급을 출력하는 함수 ( NTILE )


rank와 거의 비슷하지만 NTILE() --< 여기 괄호 사이에 몇 등급으로 나눌지 명시해줘야한다.


예제 : 직업, 이름, 월급, 등급을 출력하는데 직업별 각각 등급이 3등급으로 나눠지게 하시오 !

                                                                  (월급이 높은 순서로 등급)


select  job, ename, sal,  ntile(3)  over ( partition by job 

                                                   order  by  sal  desc ) 등급

    from  emp;


3등급으로 나눌 때 2명밖에 없어 두 등급으로 밖에 나눌 수 없다면, 2까지만 출력 된다.


4. 순위의 비율을 출력하는 함수 ( CUME_DIST )


select  ename, sal,  

         cume_dist()  over ( order  by  sal  desc ) 비율

  from  emp;


...

round를 활용해서 보기 좋게 만들자.


select  ename, sal,  

        round( cume_dist()  over ( order  by  sal  desc ), 3 ) * 100 || '%' as 비율

  from emp;



반응형

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

SQL - 컬럼을 ROW로 출력하기  (0) 2020.11.05
SQL - listagg, lag, lead  (0) 2020.11.05
SQL - 복수행 함수  (0) 2020.11.04
SQL - nvl 함수 + SQL의 IF문 구현하기  (0) 2020.11.04
SQL - 단일 변환 함수  (0) 2020.11.04