Find third MAX Salary without using Analytic Functions

 --STEP 1:

SELECT sal FROM(

  SELECT sal FROM emp ORDER BY sal DESC

)

WHERE ROWNUM < 3;

       SAL

----------

      5000

      3000

--STEP 2:

select max(sal) as sal from emp where sal not in (

    select sal from(

      select sal from emp order by sal desc

    )

    where rownum < 3

);

       SAL

----------

      2975

--STEP 3:

WITH t AS(

SELECT MAX(sal) as sal FROM emp WHERE sal NOT IN (

    SELECT sal FROM(

      SELECT sal FROM emp ORDER BY sal DESC

    )

    WHERE ROWNUM < 3)

)

SELECT a.* FROM emp a join t b on a.sal = b.sal;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7566 JONES      MANAGER         7839 02-APR-81       2975                    20

 

No comments:

Post a Comment