0

ある列に従業員の名前を保持し、別の列に従業員の給与を保持する従業員のテーブルがあるとします。2 番目に高い給与を引き出している従業員の名前を見つけるには、どのような SQL を記述すればよいでしょうか?

4

3 に答える 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 に答える