[실무에서 바로 쓰는 SQL 기본과 SQL 튜닝][ORACLE] 7강

MinHee·2023년 5월 20일
0
post-thumbnail

데이터 분석 함수

rank : 순위 출력 - 순위가 동일한 경우, 공백을 제외하고 출력 - 1,1,3,4

rank() over (order by 컬럼명 desc)

OVER 뒤에 rank를 적용할 수 있는 구문 작성 가능

예제 41) 직업이 ANALYST, MANAGER 인 사원들의 이름, 직업, 월급과
월급에 대한 순위를 출력하세요

  select ename, job, sal rank() over (order by sal desc) 순위
  from emp
  where job in ('ANALYST','MANAGER');

rank() over (order by sal desc) : 월급이 높은 순서대로 정렬한 것에 대해서 순위를 부여

dense_rank : 순위가 동일한 경우, 바로 다음 순위 출력 - 1,1,2,3

dense_rank() over (order by 컬럼명 desc)

예제 42) 순위가 직업별로 각각 월급이 높은 사원순으로 순위를 부여

dense_rank over (partition by 나눌 기준 컬럼 order by 순위를 적용할 컬럼desc)

select dense_rank() over (partition by job
order by sal desc) 순위
from emp;

예제)월급이 2975인 사원은 사원 테이블에서 월급의 순위가 몇위인가

dense_rank(기준 값) within group (order by 순위를 적용할 컬럼명 desc)
within group 뒤에 rank를 적용한 컬럼에서 dense_rank(기준값)의 순위를 출력함

  select 	dense_rank(2975) within group (order by sal desc) 순위
  from emp;

NTILE : 등급 출력

ntile(등급을 나눌 수) over (order by 기준 컬럼 desc)

예제

25%를 기준으로 등급을 나누었음

SELECT ename, job, sal, ntile(4) over (order by sal desc) 등급
from emp
where job in ('ANALYST','MANAGER');

cume_dist : 순위의 비율 출력

cume_dist() over (order by 기준 컬럼 desc)

월급의 순위에 대한 비율을 출력하시오. 순위 비율이 부서번호별로 각각 출력되게 하시오

select sal, round(cume_dist() over (partition by deptno
order by sal desc),2) 순위
from emp;

결과

listagg : 데이터를 가로로 출력

listagg(컬럼명,"붙일 구분자 또는 기호") within group (order by 기준 컬럼)

예제

select deptno, listagg(ename, ',') within group (order by ename asc) as 이름
from emp;
group by deptno;

group by를 반드시 작성하여야 함

LAG/LEAD : 바로 전 행과 다음 행 출력

lag(컬럼명, 행 번호) over (order by 기준 컬럼)
lead(컬럼명, 행 번호) over (order by 기준 컬럼)

예제

  select ename, sal, lag(sal,1) over (order by sal asc) 전행,
                      lead(sal,1) over (order by sal asc) 다음행
  from emp
  where job in ('ANALYST','MANAGER');

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

  SELECT ename, hiredate - lag(hiredate,1) over (order by hiredate asc) 
  from emp;
profile
성장하는 개발자

0개의 댓글