CREATE A TEST TABLE FOR DEMO CLASS.:
create table EMP11 (name varchar2(20), dept_no number(10), salary number (20));
insert into emp11 VALUES ('SACHIN',200,1200);
insert into emp11 VALUES ('PAPPU',200,1400);
insert into emp11 VALUES ('RAJESH',200,1800);
insert into emp11 VALUES ('NAMO',205,2200);
insert into emp11 VALUES ('BEENU',201,1000);
==============
SQL> SELECT * FROM (SELECT * FROM EMP11 ORDER BY SALARY DESC) WHERE ROWNUM<6;
NAME DEPT_NO SALARY
-------------------- ---------- ----------
NAMO 205 2200
RAJESH 200 1800
PAPPU 200 1400
SACHIN 200 1200
SACHIN 200 1200
TOP _N QUERY FIND THROUGH RANK () OVER(ORDER BY COLUMN_NAME DESC).
SQL> SELECT * FROM (SELECT NAME, SALARY, RANK () OVER (ORDER BY SALARY DESC ) AS
TOP_N FROM EMP11) WHERE TOP_N<6;
NAME SALARY TOP_N
-------------------- ---------- ----------
NAMO 2200 1
RAJESH 1800 2
PAPPU 1400 3
SACHIN 1200 4
SACHIN 1200 4
TOP _N QUERY THROUGH - FORMULA :
SELECT SALARY FROM EMPLYEES E1 WHERE (N-1)=(SELECT COUNT(DISTINCT (SALARY)) FROM EMPLOYYES E2 WHERE E2.SAL>E1.SAL;
NOTE: N IS THE VALUE WHICH YOU SHOULD BE ON THE TOP:
SQL> SELECT NAME, SALARY FROM EMP11 E1 WHERE (1-1) = (SELECT COUNT(DISTINCT (
SALARY)) FROM EMP11 E2 WHERE E2.SALARY>E1.SALARY ) ORDER BY SALARY ASC;
NAME SALARY
-------------------- ----------
NAMO 2200
SQL> SELECT NAME, SALARY FROM EMP11 E1 WHERE (2-1) = (SELECT COUNT(DISTINCT (
SALARY)) FROM EMP11 E2 WHERE E2.SALARY>E1.SALARY ) ORDER BY SALARY ASC;
NAME SALARY
-------------------- ----------
RAJESH 1800
SQL> SELECT NAME, SALARY FROM EMP11 E1 WHERE (3-1) = (SELECT COUNT(DISTINCT (
SALARY)) FROM EMP11 E2 WHERE E2.SALARY>E1.SALARY ) ORDER BY SALARY ASC;
NAME SALARY
-------------------- ----------
PAPPU 1400
SQL> SELECT NAME, SALARY FROM EMP11 E1 WHERE (4-1) = (SELECT COUNT(DISTINCT (
SALARY)) FROM EMP11 E2 WHERE E2.SALARY>E1.SALARY ) ORDER BY SALARY ASC;
NAME SALARY
-------------------- ----------
SACHIN 1200
SACHIN 1200
SQL>
0 Comments