(SQL교육, SQL순위매기기)Emp Table에서 Salary가 많은 순서로 1위부터 5위까지 Fetch
SQL> select ename, sal from emp a
where 5 > (select
count(*)
from emp b
where b.sal > a.sal)
order by sal desc;
물론 아래와 같은 경우도 된다.
select ename, sal
from emp a
where (select count(*)
from emp b
where
b.sal > a.sal) < 5
order by sal desc
다음 예문처럼 row_number()
함수를 사용해도 된다.
SELECT ename ,sal
FROM (
SELECT ename ,sal ,
row_number () over (ORDER BY sal DESC)
rn
FROM emp )
WHERE rn <= 5
또다른 방법 order by를
사용하지 않고 인덱스와 힌트를 이용해서!
내 생각엔 가장 좋을 것 같다.
create index idx_emp_sal
on emp(sal)
// 게시판에 힌트 구문이 주석처리되는 관계로 /* 사이에 - 하나 넣었습니다.
SELECT ename ,sal
FROM (
SELECT /-*+
index_desc(emp idx_emp_sal) */ ename ,sal ,
rownum rn
FROM emp
WHERE sal > 0)
WHERE rn <= 5
댓글 없음:
댓글 쓰기