[SQL TIP,SQL교육,구로디지털단지SQL교육학원,오엔제이프로그래밍실무학원]Emp Table에서 Salary가 많은 순서로 1위부터 5위(여러방법)
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
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
댓글 없음:
댓글 쓰기