Emp Table에서 Salary가 많은 순서로 1위부터 5위까지 Fetch 방법, SQL, PL/SQL강의강좌교육, SQL학원,
ORACLE SQL학원교육
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
댓글 없음:
댓글 쓰기