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

后端 未结 30 565
醉酒成梦
醉酒成梦 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:18
    SELECT Salary,EmpName
    FROM
    (
    SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
    ) tbl
    WHERE Rno=3
    
    0 讨论(0)
  • 2020-11-30 17:18

    Refer following query for getting nth highest salary. By this way you get nth highest salary in MYSQL. If you want get nth lowest salary only you need to replace DESC by ASC in the query. nth highest salary

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

    MySQL tested solution, assume N = 4:

    select min(CustomerID) from (SELECT distinct CustomerID FROM Customers order by CustomerID desc LIMIT 4) as A;
    

    Another example:

    select min(country) from (SELECT distinct country FROM Customers order by country desc limit 3);
    
    0 讨论(0)
  • 2020-11-30 17:19

    Find Nth highest salary from a table. Here is a way to do this task using dense_rank() function.

    select linkorder from u_links
    
    select max(linkorder) from u_links
    
    select max(linkorder) from u_links where linkorder < (select max(linkorder) from u_links)
    
    select top 1 linkorder 
           from ( select distinct top 2 linkorder from u_links order by linkorder desc) tmp 
    order by linkorder asc
    

    DENSE_RANK : 1. DENSE_RANK computes the rank of a row in an ordered group of rows and returns the rank as a NUMBER. The ranks are consecutive integers beginning with 1. 2. This function accepts arguments as any numeric data type and returns NUMBER. 3. As an analytic function, DENSE_RANK computes the rank of each row returned from a query with respect to the other rows, based on the values of the value_exprs in the order_by_clause. 4. In the above query the rank is returned based on sal of the employee table. In case of tie, it assigns equal rank to all the rows.

    WITH result AS ( 
         SELECT linkorder ,DENSE_RANK() OVER ( ORDER BY linkorder DESC ) AS  DanseRank 
    FROM u_links ) 
    SELECT TOP 1 linkorder FROM result WHERE DanseRank = 5
    
    0 讨论(0)
  • 2020-11-30 17:22

    Row Number :

    SELECT Salary,EmpName
    FROM
      (
       SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
       FROM EMPLOYEE
       ) As A
    WHERE A.RowNum IN (2,3)
    

    Sub Query :

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

    Top Keyword :

    SELECT TOP 1 salary
    FROM (
          SELECT DISTINCT TOP n salary
          FROM employee
          ORDER BY salary DESC
          ) a
    ORDER BY salary
    
    0 讨论(0)
  • 2020-11-30 17:22
    Select TOP 1 Salary as '3rd Highest Salary' from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC) a ORDER BY Salary ASC;
    

    I am showing 3rd highest salary

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