How to find third or nᵗʰ maximum salary from salary table?

后端 未结 30 566
醉酒成梦
醉酒成梦 2020-11-30 16:30

How to find third or nth maximum salary from salary table(EmpID, EmpName, EmpSalary) in optimized way?

相关标签:
30条回答
  • 2020-11-30 17:11
    select * from employee order by salary desc;
    
    +------+------+------+-----------+
    | id   | name | age  | salary    |
    +------+------+------+-----------+
    |    5 | AJ   |   20 | 100000.00 |
    |    4 | Ajay |   25 |  80000.00 |
    |    2 | ASM  |   28 |  50000.00 |
    |    3 | AM   |   22 |  50000.00 |
    |    1 | AJ   |   24 |  30000.00 |
    |    6 | Riu  |   20 |  20000.00 |
    +------+------+------+-----------+
    
    
    
    
    select distinct salary from employee e1 where (n) = (select count( distinct(salary) ) from employee e2 where e1.salary<=e2.salary);
    

    Replace n with the nth highest salary as number.

    0 讨论(0)
  • 2020-11-30 17:13

    Too simple if you use the sub query!

    SELECT MIN(EmpSalary) from (
    SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3
    );
    

    You can here just change the nth value after the LIMIT constraint.

    Here in this the Sub query Select EmpSalary from Employee Order by EmpSalary DESC Limit 3; would return the top 3 salaries of the Employees. Out of the result we will choose the Minimum salary using MIN command to get the 3rd TOP salary of the employee.

    0 讨论(0)
  • 2020-11-30 17:13

    This is one of the popular question in any SQL interview. I am going to write down different queries to find out the nth highest value of a column.

    I have created a table named “Emloyee” by running the below script.

    CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)
    

    Now I am going to insert 8 rows into this table by running below insert statement.

    insert into Employee values(1,'Neeraj',45000)
    insert into Employee values(2,'Ankit',5000)
    insert into Employee values(3,'Akshay',6000)
    insert into Employee values(4,'Ramesh',7600)
    insert into Employee values(5,'Vikas',4000)
    insert into Employee values(7,'Neha',8500)
    insert into Employee values(8,'Shivika',4500)
    insert into Employee values(9,'Tarun',9500)
    

    Now we will find out 3rd highest Basic_sal from the above table using different queries. I have run the below query in management studio and below is the result.

    select * from Employee order by Basic_Sal desc
    

    We can see in the above image that 3rd highest Basic Salary would be 8500. I am writing 3 different ways of doing the same. By running all three mentioned below queries we will get same result i.e. 8500.

    First Way: - Using row number function

    select Ename,Basic_sal
    from(
                select Ename,Basic_Sal,ROW_NUMBER() over (order by Basic_Sal desc) as rowid from Employee
          )A
    where rowid=2
    
    0 讨论(0)
  • 2020-11-30 17:14
    SELECT TOP 1 salary FROM ( SELECT TOP n salary FROM employees ORDER BY salary DESC Group By salary ) AS emp ORDER BY salary ASC
    

    (where n for nth maximum salary)

    0 讨论(0)
  • 2020-11-30 17:15
    SELECT EmpSalary 
    FROM salary_table 
    GROUP BY EmpSalary 
    ORDER BY EmpSalary DESC LIMIT n-1, 1;
    
    0 讨论(0)
  • 2020-11-30 17:15

    In SQL Server 2012+, OFFSET...FETCH would be an efficient way to achieve this:

    DECLARE @N AS INT;
    SET @N = 3;
    
    SELECT
        EmpSalary
    FROM
        dbo.Salary
    ORDER BY
        EmpSalary DESC
    OFFSET (@N-1) ROWS
    FETCH NEXT 1 ROWS ONLY
    
    0 讨论(0)
提交回复
热议问题