MySQL 每个项目第二高
MySQL second highest in each project
我想计算每个项目中第二高的 hourly_rate
员工。
但是我不知道我哪里做错了
我关注的table结构:
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;
joins
不限于平等,你也可以加入<
。这意味着如果我们找到 max(hourly_rate)
,我们就可以根据小于 max
的所有 hourly_rate
加入那个结果,并且也有相同的 project_code
,来自在那里我们只需要再次分组并从加入的 table 中获取 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;
如果没有第二高的话,这个会给出最高的值。
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
员工。
但是我不知道我哪里做错了
我关注的table结构:
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;
joins
不限于平等,你也可以加入<
。这意味着如果我们找到 max(hourly_rate)
,我们就可以根据小于 max
的所有 hourly_rate
加入那个结果,并且也有相同的 project_code
,来自在那里我们只需要再次分组并从加入的 table 中获取 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;
如果没有第二高的话,这个会给出最高的值。
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
的宽容处理,您将获得一名员工,但如果有多个员工,则无法保证您会获得哪一个同样的比率。