如何从员工表中找到第二大薪水?

Din*_*esh 25 mysql sql sql-server-2005

我如何查询员工表中所有员工的第二大薪水?

小智 57

试试这个:

SELECT max(salary)
FROM emptable
WHERE salary < (SELECT max(salary)
                FROM emptable);
Run Code Online (Sandbox Code Playgroud)


San*_*ara 46

简单回答:

SELECT distinct(sal)
FROM emp
ORDER BY sal DESC
LIMIT 1, 1;
Run Code Online (Sandbox Code Playgroud)

您将只获得第二个最高薪水.

如果你需要任何第3或第4或第N个值,你可以增加第一个值,然后是LIMIT (n-1)ie.第四薪水:LIMIT 3, 1;


小智 12

大多数其他答案似乎都是数据库特定的.

一般SQL查询应如下所示:

select
   sal 
from
   emp a 
where
   N = (
      select
         count(distinct sal) 
      from
         emp b 
      where
         a.sal <= b.sal
   )
where
   N = any value
Run Code Online (Sandbox Code Playgroud)

此查询应该能够在任何数据库上工作.


Joh*_*lla 11

尝试类似的东西:

SELECT TOP 1 compensation FROM (
  SELECT TOP 2 compensation FROM employees
  ORDER BY compensation DESC
) AS em ORDER BY compensation ASC
Run Code Online (Sandbox Code Playgroud)

实质上:

  • 按降序排列前2名工资.
  • 在这2个中,按升序查找最高薪水.
  • 所选值是第二高的薪水.

如果工资不明显,您可以SELECT DISTINCT TOP ...改用.


Cod*_*awk 9

也许你应该使用DENSE_RANK.

SELECT *
FROM (
       SELECT
         [Salary],
         (DENSE_RANK()
         OVER
         (
           ORDER BY [Salary] DESC)) AS rnk
       FROM [Table1]
       GROUP BY [Num]
     ) AS A
WHERE A.rnk = 2
Run Code Online (Sandbox Code Playgroud)

  • 用DENSE_RANK()替换RANK()并且它可以工作. (3认同)

小智 5

要找到员工的第二个最高工资,

SELECT MAX(salary) FROM employee
WHERE salary NOT IN (
    SELECT MAX (salary) FROM employee
)
Run Code Online (Sandbox Code Playgroud)

要找到员工的第一和第二最高薪水,

SELECT salary FROM (
    SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC
) WHERE rownum<=2
Run Code Online (Sandbox Code Playgroud)

这个查询工作正常,因为我已经使用过


小智 5

select max(Emp_Sal) 
from Employee a
where 1 = ( select count(*) 
         from Employee b
         where b.Emp_Sal > a.Emp_Sal)
Run Code Online (Sandbox Code Playgroud)

是跑男.


Him*_*arg 5

//选择工资第二高的员工姓名

SELECT name
FROM employee WHERE salary =
       (SELECT MIN(salary) FROM 
             (SELECT TOP (2) salary
              FROM employee
              ORDER BY salary DESC) )
Run Code Online (Sandbox Code Playgroud)