joins
平等に限らず、入会も可能<
です。これは、 が見つかった場合、よりも小さいmax(hourly_rate)
すべてのものに基づいてその結果に結合でき、それも同じ を持ち、そこから再びグループ化して、結合されたテーブルから値を取得するだけでよいことを意味します。hourly_rate
max
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;
(これは、2 番目に高い率が常に存在することを前提としています (すべての従業員の率が同じか、1 人の従業員のみ))
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;
そして、2 番目に高い値がない場合、これが最高値になります。
デモフィドル
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
従業員を取得しますが、同じ割合で複数の従業員がいる場合、どの従業員を取得できるかについての保証はありません。