【问题标题】:MySQL second highest in each projectMySQL每个项目中第二高的
【发布时间】:2015-04-17 05:00:40
【问题描述】:

我想计算每个项目中员工的 SECOND 最高 hourly_rate。 但我不知道我哪里做错了

我关心的表结构:

project_team: project_code (FK), employee_id (FK), hourly_rate

这是我的查询,它给出了唯一一个不是第二高的记录。

注意:我有 3 个项目,每个项目都有很多员工。

SELECT * FROM (
    SELECT * FROM project_team GROUP BY project_code ORDER BY hourly_rate DESC LIMIT 1,1
) e;

【问题讨论】:

  • 为什么那里有一个子选择?你不需要它
  • 首先,我想选择 3 个具有第二高 hour_rate 的项目,然后查看这些项目......为什么我不需要子选择查询?
  • 它返回了我的一个每小时速率最高的项目。
  • 如果没有第二高怎么办?即,他们都是平等的,还是只有一名员工?
  • 你说得对,Cristik 只是多了一个我想要第二高的要求。

标签: mysql highest


【解决方案1】:

joins不限于平等,你也可以加入<。这意味着如果我们找到max(hourly_rate),我们可以基于小于max的所有hourly_rate加入该结果,并且也具有相同的project_code,从那里我们只需要再次分组并从连接表中获取 max 值。

select p1.project_code, max(p2.hourly_rate)
from
 (select project_code, max(hourly_rate) r from project_team group by project_code) p1
 left join project_team p2
   on p2.project_code = p1.project_code and p2.hourly_rate < p1.r
group by project_code;

(假设总是有第二高的(所有员工的费率相同,或者只有一名员工))

select p1.project_code, ifnull(max(p2.hourly_rate), p1.r) 
from
 (select project_code, max(hourly_rate) r from project_team group by project_code) p1
 left join project_team p2
   on p2.project_code = p1.project_code and p2.hourly_rate < p1.r
group by project_code;

如果没有第二高,则此值将给出最高值。

Demo Fiddle

select t.project_code, t.second_max_rate, t2.employee_id
from
  (select p1.project_code, ifnull(max(p2.hourly_rate), p1.r)  second_max_rate
    from
     (select project_code, max(hourly_rate) r from project_team group by project_code) p1
    left join project_team p2
      on p2.project_code = p1.project_code and p2.hourly_rate < p1.r
  group by project_code) t
  inner join project_team t2
    on t.project_code = t2.project_code and t.second_max_rate = t2.hourly_rate
  group by t.project_code;

此版本还包括员工 - 但请注意,它滥用 mysqls 对group by 的宽大处理,您将获得一名员工,但无法保证如果有多个相同费率的员工,您将获得哪一位。

【讨论】:

  • 成功了!现在让我们假设是否没有第二高。
  • 我无法获得第二高的 hourly_rate @pala_ 的准确员工 ID
  • 对不起,没有意识到你也想要这个员工
  • 没关系,我自己做不到。
  • 最后一个问题!你能给我推荐一个很好的资源,让我可以深入了解 MySQL 并提供可靠的解释吗?
猜你喜欢
  • 2018-06-20
  • 2021-02-13
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
相关资源
最近更新 更多