【问题标题】:How to get First Highest or Second Highest or Third Highest Salary from Employee table [closed]如何从员工表中获得第一高或第二高或第三高的薪水[关闭]
【发布时间】:2014-09-02 22:54:19
【问题描述】:

如果有人比这更好,我将分享我的 SQL,请在此处发布。

要获得以下查询的第一个最高薪水:

select salary from employee order by salary desc limit 1;

要获得第二高的薪水,请运行以下查询:

select salary from employee order by salary desc limit 1,1;

要获得第三高薪运行以下查询:

select salary from employee order by salary desc limit 2,1;

【问题讨论】:

  • 这看起来是最好的方法。有什么问题?
  • 这是mysql的问题吗?
  • 我的问题是如果存在相同的薪水呢?
  • 我更喜欢例如第三个:'...limit 1 offset 2' 以提高可读性。
  • 你欢迎 robsn...我在这里发布的最常用的语法,但为了便于阅读,我同意你的回答。

标签: mysql sql


【解决方案1】:

您可以使用此查询获得最高薪水,其中N 是第 N 高薪水。

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

【讨论】:

  • 我认为这是另一种方式,但不是更好的方式。
【解决方案2】:

您的代码很好......除了是否存在多个薪水......即,如果前 10 名的薪水是 1000,那么最高薪水 = 1000,前 3 名 = 1000 等等

使用分组...

select salary
from employee
GROUP BY salary
order by salary desc limit 1;

或者一个独特的...

select DISTINCT(salary)
from employee
order by salary desc limit 1;

【讨论】:

  • 谢谢@Paul Zahra .....我明白你的意思了。
【解决方案3】:

我会做以下事情:

SELECT TOP 1 FROM employee ORDER BY salary desc

获得第二高的

SELECT TOP 1 FROM employee ORDER BY salary DESC OFFSET 1

得到第三个

SELECT TOP 1 FROM employee ORDER BY salary DESC OFFSET 2

但是,如果您要在同一段代码中使用所有三个,我建议您同时获取所有三个,因为这样可以执行 2 个队列。我想建议 folioing 查询以获得前 3 名的最高薪水

SELECT TOP 3 FROM employee ORDER BY salary DESC

【讨论】:

  • 嗯...这是一个mysql 问题
  • 你的答案我对 SQL 没问题,但我把它发布到 MySQL...顺便说一句,没有问题,它很好的学习...
  • 你有两个标签,mysql和sql
  • 据我所知,这适用于 mysql,部分不适用于 mysql(我是 mssql 用户)
【解决方案4】:

你为什么不使用这样的查询

SELECT * FROM employee ORDER BY salary DESC LIMIT 3;

当你解析它时,你可以遍历每一行。我认为使用LIMIT 3 比使用TOP 3 更好。参考Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2011-01-30
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多