How can I select the record with the 2nd highest salary in database Oracle?

后端 未结 18 1270
孤城傲影
孤城傲影 2020-12-30 17:27

Suppose I have a table employee with id, user_name, salary. How can I select the record with the 2nd highest salary in Oracle?

I googled it, find this solution, is t

相关标签:
18条回答
  • 2020-12-30 17:58
    WITH records
    AS
    (
        SELECT  id, user_name, salary,
                DENSE_RANK() OVER (PARTITION BY id ORDER BY salary DESC) rn
        FROM    tableName
    )
    SELECT  id, user_name, salary
    FROM    records 
    WHERE   rn = 2
    
    • DENSE_RANK()
    0 讨论(0)
  • 2020-12-30 17:58

    This query helps me every time for problems like this. Replace N with position..

    select *
    from(
         select *
         from (select * from TABLE_NAME order by SALARY_COLUMN desc)
         where rownum <=N
        )
    where SALARY_COLUMN <= all(
                    select SALARY_COLUMN
                    from (select * from TABLE_NAME order by SALARY_COLUMN desc)
                    where rownum <=N
                   );
    
    0 讨论(0)
  • 2020-12-30 18:00
    select * from emp where sal = (
    select sal from
         (select rownum n,a.sal from
        ( select distinct sal from emp order by sal desc) a)
    where n = 2);
    

    This is more optimum, it suits all scenarios...

    0 讨论(0)
  • 2020-12-30 18:00

    Replace N with your Highest Number

    SELECT *
    FROM Employee Emp1
    WHERE (N-1) = (
    SELECT COUNT(DISTINCT(Emp2.Salary))
    FROM Employee Emp2
    WHERE Emp2.Salary > Emp1.Salary)
    

    Explanation

    The query above can be quite confusing if you have not seen anything like it before – the inner query is what’s called a correlated sub-query because the inner query (the subquery) uses a value from the outer query (in this case the Emp1 table) in it’s WHERE clause.

    And Source

    I have given the answer here

    By the way I am flagging this Question as Duplicate.

    0 讨论(0)
  • 2020-12-30 18:00

    Syntax it for Sql server

    SELECT MAX(Salary) as 'Salary' from EmployeeDetails
    where Salary NOT IN
    (
    SELECT TOP n-1 (SALARY) from EmployeeDetails ORDER BY Salary Desc
    )
    

    To get 2nd highest salary of employee then we need replace “n” with 2 our query like will be this

    SELECT MAX(Salary) as 'Salary' from EmployeeDetails
    where Salary NOT IN
    (
    SELECT TOP 1 (SALARY) from EmployeeDetails ORDER BY Salary Desc
    )
    

    3rd highest salary of employee

    SELECT MAX(Salary) as 'Salary' from EmployeeDetails
    where Salary NOT IN
    (
    SELECT TOP 2 (SALARY) from EmployeeDetails ORDER BY Salary Desc
    )
    
    0 讨论(0)
  • 2020-12-30 18:01

    This query works in SQL*PLUS to find out the 2nd Highest Salary -

    SELECT * FROM EMP
    WHERE SAL = (SELECT MAX(SAL) FROM EMP
    WHERE SAL < (SELECT MAX(SAL) FROM EMP));
    

    This is double sub-query.

    I hope this helps you..

    0 讨论(0)
提交回复
热议问题