[데이터베이스] 78. 통계쿼리 함수들 (1) 순위구하기 rank() over 함수

서회정's avatar
Feb 28, 2025
[데이터베이스] 78. 통계쿼리 함수들 (1) 순위구하기 rank() over 함수
📌
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

clubnerdy