查找员工表MySQL的最大和第二个最高工资

dps*_*dce 26 mysql sql

假设您获得了以下名为Employee的简单数据库表,该表有2列名为Employee ID和Salary:

  Employee
  Employee ID    Salary
   3            200
   4            800
   7            450
Run Code Online (Sandbox Code Playgroud)

我希望写一个查询select max(salary)as max_salary,2nd_max_salary from employee

然后它应该返回

  max_salary   2nd_max_salary
   800             450
Run Code Online (Sandbox Code Playgroud)

我知道如何找到第二高薪

   SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
Run Code Online (Sandbox Code Playgroud)

或者找到第n个

  SELECT FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2
  WHERE Emp2.Salary > Emp1.Salary)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将这两个结果加入到期望的结果中

Szy*_*mon 37

您可以运行2个查询作为内部查询以返回2列:

select
  (SELECT MAX(Salary) FROM Employee) maxsalary,
  (SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as [2nd_max_salary]
Run Code Online (Sandbox Code Playgroud)

SQL小提琴演示


Vig*_*r A 19

试试这样吧

SELECT (select max(Salary) from Employee) as MAXinmum),(max(salary) FROM Employee WHERE salary NOT IN (SELECT max(salary)) FROM Employee);
Run Code Online (Sandbox Code Playgroud)

(要么)

试试这个,n将是你想要返回的第n个项目

 SELECT DISTINCT(Salary) FROM table ORDER BY Salary DESC LIMIT n,1
Run Code Online (Sandbox Code Playgroud)

在你的情况下

 SELECT DISTINCT(column_name) FROM table_name ORDER BY column_name DESC limit 2,1;
Run Code Online (Sandbox Code Playgroud)


Swa*_*har 11

获取第二个最高工资和第n个工资的最简单方法

select 
 DISTINCT(salary) 
from employee 
 order by salary desc 
limit 1,1
Run Code Online (Sandbox Code Playgroud)

注意:

limit 0,1  - Top max salary

limit 1,1  - Second max salary

limit 2,1  - Third max salary

limit 3,1  - Fourth max salary
Run Code Online (Sandbox Code Playgroud)


小智 10

最佳和最简单的解决方案: -

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