【问题标题】:How to get second highest salary department wise?如何明智地获得第二高薪部门?
【发布时间】:2019-05-02 10:49:34
【问题描述】:

假设我们每个部门都有一些员工。我们总共有 3 个部门。下面是名为“employee”的示例源表

emp dept_id salary
A    10     1000
B    10     2000
C    10     3000
D    20     7000
E    20     9000
F    20     8000
G    30     17000
H    30     15000
I    30     30000
j    30     30000
k    30     17000

这里可能同一部门有相同的薪水。

我使用具有 mysql-5.7.23 的 Wamp-server

我想喜欢:

B    10     2000
F    20     8000
G    30     17000

【问题讨论】:

  • 可能是您的问题是错误的,因为您使用该语句提到“同一部门存在相同的薪水”,您希望输出仅与部门 id 30 相关

标签: mysql greatest-n-per-group


【解决方案1】:

我认为有几种方法可以解决这个问题。遵循我这边的解决方案并且工作正常。

SELECT *
From employee e2 
WHERE e2.salary = (SELECT distinct salary FROM employee where dept_id=e2.dept_id order by salary desc limit 1,1);

我只需要部门明智的第二高薪水值,这是我项目中下一个操作的输入数组。最后我用了

SELECT e2.dept_id, max(e2.salary) From employee e2 WHERE e2.salary = (SELECT distinct salary FROM employee where dept_id=e2.dept_id order by salary desc limit 1,1) group by e2.dept_id

【讨论】:

  • 这个查询不需要group by(事实上,由于违反了sql模式only_full_groupby,它会导致它在许多MySQL安装上失败)
  • 在这种情况下没有分组,结果如下所示:B 10 2000 F 20 8000 G 30 17000 k 30 17000 那么你怎么看? @尼克
  • 如果目标是员工数据,那么您是对的。但是这里我只需要一个数据,工资是17000,这是我项目需要的下一个操作的输入。
  • 然后您可以将查询更改为SELECT DISTINCT dept_id, salary,您仍然可以删除group by。否则,您可以保留group by 并更改为SELECT dept_id, MIN(salary)(或MAX,因为任何值都是相同的没关系)
  • 如果你想要一行,你可以简单地通过 emp 而不是薪水加入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2014-09-02
  • 2019-04-17
相关资源
最近更新 更多