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() 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(등급을 나눌 수) 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() over (order by 기준 컬럼 desc)
월급의 순위에 대한 비율을 출력하시오. 순위 비율이 부서번호별로 각각 출력되게 하시오
select sal, round(cume_dist() over (partition by deptno
order by sal desc),2) 순위
from emp;
listagg(컬럼명,"붙일 구분자 또는 기호") within group (order by 기준 컬럼)
select deptno, listagg(ename, ',') within group (order by ename asc) as 이름
from emp;
group by deptno;
group by를 반드시 작성하여야 함
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;