rank() over, row_number(), set @rownum := 0
-- 디비 고급 함수
-- 제조사마다 다름.
-- 1. RANK
select empno, ename, sal ,1 '순위번호'
from emp
order by sal desc;
select empno, ename, sal,
rank() over(order by sal desc) '순위'
from emp;
-- 같은 값은 중복 순위로
select empno, ename, sal,
dense_rank() over(order by sal desc) '순위'
from emp;
-- 걍 무시까고 번호로 매김
select empno, ename, sal,
row_number() over(order by sal desc) '순위'
from emp;
-- 2. 문제 (emp 테이블에서, 본인의 월급과 상사의 월급의 합의 순위를 내림차순으로 구하시오)
select *
from emp;
-- 나와 내 상사 찾기.
select e1.empno '나', e1.ename '사원명', e1.sal '내 월급', e2.ename '상사명', e2.sal '상사 월급'
from emp e1 left outer join emp e2
on e1.mgr = e2.empno;
-- 나의 월급과 상사 월급 찾아서 더하기
select e1.empno '나', e1.ename '사원명', e1.sal '내 월급', e2.ename '상사명', e2.sal '상사 월급', (e1.sal+ifnull(e2.sal, 0)) '월급 합'
from emp e1 left outer join emp e2
on e1.mgr = e2.empno;
-- 합을 내림차순으로 구하기
select e1.ename '나', e1.sal '내 월급', e2.sal '상사 월급', (e1.sal+ifnull(e2.sal, 0)) '월급 합',
rank() over(order by (e1.sal+ifnull(e2.sal, 0)) desc) '순위'
from emp e1 left outer join emp e2
on e1.mgr = e2.empno;
select *
from
(
select e1.empno '나', e1.ename '사원명', e1.sal '내월급', e2.ename '상사명', e2.sal '상사월급',
e1.sal+ifnull(e2.sal, 0) '월급합'
from emp e1 left outer join emp e2 on e1.mgr = e2.empno
) nemp;
-- 최종
select 나, 상사명, 내월급, 상사월급,
rank() over(order by 상사월급 desc ) '순위'
from
(
select e1.empno '나', e1.ename '사원명', e1.sal '내월급', e2.ename '상사명', e2.sal '상사월급',
e1.sal+ifnull(e2.sal, 0) '월급합'
from emp e1 left outer join emp e2 on e1.mgr = e2.empno
) nemp;
Share article