Top-N Query
SQL> select empno, ename, sal,
2 rank() over (order by sal desc) as rk
3 from emp;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 2
7566 JONES 2975 4
7698 BLAKE 2850 5
7782 CLARK 2450 6
7499 ALLEN 1600 7
7844 TURNER 1500 8
7934 MILLER 1300 9
7521 WARD 1250 10
7654 MARTIN 1250 10
7876 ADAMS 1100 12
7900 JAMES 950 13
7369 SMITH 800 14
14 rows selected.
SQL> select empno, ename, sal,
2 dense_rank() over (order by sal desc) as rk
3 from emp;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 2
7566 JONES 2975 3
7698 BLAKE 2850 4
7782 CLARK 2450 5
7499 ALLEN 1600 6
7844 TURNER 1500 7
7934 MILLER 1300 8
7521 WARD 1250 9
7654 MARTIN 1250 9
7876 ADAMS 1100 10
7900 JAMES 950 11
7369 SMITH 800 12
14 rows selected.
SQL> select empno, ename, sal, rownum
2 from emp;
EMPNO ENAME SAL ROWNUM
---------- ---------- ---------- ----------
7369 SMITH 800 1
7499 ALLEN 1600 2
7521 WARD 1250 3
7566 JONES 2975 4
7654 MARTIN 1250 5
7698 BLAKE 2850 6
7782 CLARK 2450 7
7788 SCOTT 3000 8
7839 KING 5000 9
7844 TURNER 1500 10
7876 ADAMS 1100 11
7900 JAMES 950 12
7902 FORD 3000 13
7934 MILLER 1300 14
14 rows selected.
SQL> select a.*, rownum
2 from (select empno, ename, sal from emp order by sal desc) a;
EMPNO ENAME SAL ROWNUM
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 3
7566 JONES 2975 4
7698 BLAKE 2850 5
7782 CLARK 2450 6
7499 ALLEN 1600 7
7844 TURNER 1500 8
7934 MILLER 1300 9
7521 WARD 1250 10
7654 MARTIN 1250 11
7876 ADAMS 1100 12
7900 JAMES 950 13
7369 SMITH 800 14
14 rows selected.
SQL> select a.*, rownum
2 from (select empno, ename, sal from emp order by sal desc) a
3 where rownum = 1;
EMPNO ENAME SAL ROWNUM
---------- ---------- ---------- ----------
7839 KING 5000 1
SQL> select a.*, rownum
2 from (select empno, ename, sal from emp order by sal desc) a
3 where rownum = 5;
no rows selected
SQL> select empno, ename, sal,
2 rank() over (order by sal desc) as rk
3 from emp
4 where rk = 5;
where rk = 5
*
ERROR at line 4:
ORA-00904: "RK": invalid identifier
SQL> select *
2 from (select empno, ename, sal,
3 rank() over (order by sal desc) as rk
4 from emp)
5 where rk = 5;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7698 BLAKE 2850 5
SQL> select empno, ename, sal,
2 dense_rank() over (order by sal desc) as rk
3 from emp
4 where rk = 5;
where rk = 5
*
ERROR at line 4:
ORA-00904: "RK": invalid identifier
SQL> select *
2 from (select empno, ename, sal,
3 dense_rank() over (order by sal desc) as rk
4 from emp)
5 where rk = 5;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7782 CLARK 2450 5
SQL> select a.*, rownum
2 from (select empno, ename, sal from emp order by sal desc) a
3 where rownum <= 5;
EMPNO ENAME SAL ROWNUM
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 3
7566 JONES 2975 4
7698 BLAKE 2850 5
5 rows selected.
SQL> select *
2 from (select empno, ename, sal,
3 rank() over (order by sal desc) as rk
4 from emp)
5 where rk <=5;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 2
7566 JONES 2975 4
7698 BLAKE 2850 5
5 rows selected.
SQL> select *
2 from (select empno, ename, sal,
3 dense_rank() over (order by sal desc) as rk
4 from emp)
5 where rk <=5;
EMPNO ENAME SAL RK
---------- ---------- ---------- ----------
7839 KING 5000 1
7788 SCOTT 3000 2
7902 FORD 3000 2
7566 JONES 2975 3
7698 BLAKE 2850 4
7782 CLARK 2450 5
6 rows selected.
SQL> select *
2 from (select a.*, rownum rnum
3 from (select empno, ename, sal
4 from emp order by sal desc) a
5 where rownum <= 10)
6 where rnum >= 6;
EMPNO ENAME SAL RNUM
---------- ---------- ---------- ----------
7782 CLARK 2450 6
7499 ALLEN 1600 7
7844 TURNER 1500 8
7934 MILLER 1300 9
7521 WARD 1250 10
5 rows selected.
'Oracle > SQL & PL/SQL' 카테고리의 다른 글
Top-N Analysis (1) | 2010.04.06 |
---|---|
Subquery (0) | 2010.04.06 |
View (0) | 2010.02.18 |
Index (0) | 2010.02.18 |
데이터 무결성 제약조건 (0) | 2010.02.17 |