ある列に従業員の名前を保持し、別の列に従業員の給与を保持する従業員のテーブルがあるとします。2 番目に高い給与を引き出している従業員の名前を見つけるには、どのような SQL を記述すればよいでしょうか?
3 に答える
2
私は使用しますrow_number()
:
select e.*
from (select e.*, row_number() over (order by salary desc) as seqnum
from employees e
) e
where seqnum = 1
limit
他の人は/ top
/rownum
アプローチについて言及しています:
select e.*
from (select e.*
from employees e
order by salary desc
limit 2
) t
order by salary
limit 1
オフセットでも同じことができます:
select e.*
from employees e
order by salary desc
limit 2, 1
ただし、最高の給与が同数の場合、これらすべてに問題があります。最初の方法は、次のように置き換えることrow_number()
で簡単に修正できdense_rank()
ます。
select e.*
from (select e.*, dense_rank() over (order by salary desc) as seqnum
from employees e
) e
where seqnum = 1
そして、別の方法は次のとおりです。
select e.*
from employees e
where e.salary < (select max(salary) from employees)
order by salary desc
limit 1 -- or top 1 or rownum = 1 etc.
于 2013-03-07T19:26:39.897 に答える
1
昇順でソートされた「上位 2」から選択してから、「上位 1」を選択すると、正しい行が得られます。
于 2013-03-07T19:02:39.390 に答える
0
あなたは次のようなことをすることができます:
select * from (select * from Employees order by salary desc limit 2) as A order by salary asc limit 1;
于 2013-03-07T19:03:23.537 に答える