2013-03-07 52 views
0

說我有一張僱員表,我在一列中保留僱員的姓名,在另一列中保留僱員的工資。我應該寫什麼SQL來找到繪製第二高薪水的僱員的名字?用於查找第二高的SQL

+1

看看這裏:http://stackoverflow.com/questions/32100/what-是最簡單的sql查詢找到第二大值 – niculare 2013-03-07 19:01:45

+0

您使用哪種RDBMS? – 2013-03-07 19:01:53

+1

請參閱[這裏](http://stackoverflow.com/questions/4297160/sql-command-for-finding-the-second-highest-salary?rq=1)。非常簡單的查詢,真的。 – fcm 2013-03-07 19:03:39

回答

1

您可以嘗試從「Top 2」中選擇,按升序排序,然後選擇「Top 1」,這會給你正確的行。

+0

頂2排序升序給你兩個最低的薪水? – msmucker0527 2013-03-07 19:04:07

+0

檢查...降級!感謝收穫 – 2013-03-07 19:42:47

0

你可以這樣做:

select * from (select * from Employees order by salary desc limit 2) as A order by salary asc limit 1; 
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.