SQL 데이터 분석 함수

2020. 4. 27. 13:52·Programming/SQL
728x90

1. rank

2. dense_rank

3. nitle

4. listagg

5. lead

6. 누적데이터 출력함수

7. pivot과 unpivot


1. rank함수 - 순위를 출력하는 함수

rank() over (order by 컬럼명)

 

예제) 이름, 월급, 월급에 대한 순위를 출력하시오

select ename, sal, rank() over (order by sal desc) 
from emp;a

 

순위가 나옴과 함께 순위대로 정렬된다.

2. dense_rank

rank함수와 비슷하지만 위의 쿼리의 결과의 경우 월급이 3000인 사람은 scott과 ford로 둘이다.

둘다 2순위로 나오고 그 밑에 jones는 4순위로 나온다 dense_rank를 사용하면 비는 숫자 없이 나온다.

 

예제) 이름, 월급, 월급에 대한 순위를 출력하는데 dense_rank를 사용하시오

select ename, sal, dense_rank() over (order by sal desc)
from emp;

 

3. listagg - 결과를 가로로 출력하는 함수

listagg ( 출력할 컬럼명, ', ') within group by (order by 컬럼명)

-> 뒤에 within group by (order by 컬럼명) 은 안써도 무관하다.

select deptno, listagg(ename, ', ') within group (order by ename)
from emp
group by deptno;

 

4. ntile 함수 - 등급을 출력하는 함수

ntile(나눌 등급의 수)

 

예제) 이름, 입사일, 입사한 사원순으로 등급을 나누는데 5등급으로 나누시오

select ename, hiredate, ntile(5) over (order by hiredate asc) 
from emp;

5. lag 함수 - 바로 전행을 출력하는 함수

 

select ename, sal, lag(sal, 1) over (order by sal asc)
from emp;

바로 전행의 월급이 출력이 된다

예제) 이름, 입사일, 바로전에 입사한 사원과의 간격일을 출력하시오

select ename, hiredate, lag(hiredate,1) over (order by hiredate asc) as 바로전입사,
       hiredate-lag(hiredate, 1) over (order by hiredate asc) 간격
from emp;

 

6. lead 함수 - 바로 다음행을 출력하는 함수

select ename, sal, lead(sal, 1) over (order by sal asc)
from emp;

다음행의 월급이 출력 된다.

7. pivot과 unpivot

pivot - 로우(row)를 컬럼(column)으로 출력하는 함수

unpivot - 컬럼(column)을 로우(row)로 출력하는 함수

 

예제) 부서번호, 부서번호별 토탈 월급을 가로로 출력하시오

select *
from (
	select deptno, sal
	from emp
      )
 pivot (sum(sal) for deptno in (10,20,30));

* pivot문은 pivot할 데이터를 알아야 사용이 가능하다.

 

->pivot 없이 출력하기

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

 

 

*pivot문도 사용하긴 하지만 decode문으로 많이 쓴다.

select sum(decode (deptno,10,sal))as"10",
	sum(decode (deptno,20,sal))as"20",
	sum(decode (deptno,30,sal))as"30"
    from emp;

-> 위의 쿼리를 실행 해보면 pivot문을 사용한 것과 결과가 동일하게 출력된다.

 

8. 누적데이터 출력함수

 

누적 데이터 출력하는 방법

select ename, sal, sum(sal) over (order by sal rows
                                        between unbounded preceding
                                        and current row) 누적치
from emp;

※ unbounded preceding : 제일 첫번째 행

   unbounded following  : 맨 마지막행

   current row               : 현재 행

'Programming/SQL' 카테고리의 다른 글
  • SQL 조인 - 1999 ansi join
  • SQL 조인 - 오라클 조인
  • SQL 복수행 함수
  • SQL 단일행함수 - 일반함수
해치
해치
뭐라도 하자
  • 해치
    hi there
    해치
  • 글쓰기 관리자
  • 전체
    오늘
    어제
    • ALL (70)
      • Programming (62)
        • Python (14)
        • SQL (13)
        • 알고리즘 (35)
      • Framework (4)
        • Airflow (3)
        • Django (1)
      • Infra (3)
        • Docker (3)
        • Linux (0)
      • AWS (0)
      • Dashboard (1)
  • 블로그 메뉴

    • 링크

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    해치
    SQL 데이터 분석 함수
    상단으로

    티스토리툴바