2012-08-31 67 views
1

我有兩個表..SQL查詢,找出第三高的薪水涉及多個表

人:

empid(primary key) 
firstname 
lastname 
email 

詳情:

Did(primary key) 
salary 
designation 
empid 

現在我要選擇firstnamelastname ,第salary的第三個最高的工資。

此外,如果您可以建議我一個網站,我可以找到解決方案的SQL查詢練習(我不需要在線解釋器,我有SQL Server 2008的練習),我已經完成了w3schools太棒了),但我現在需要練習,我嘗試了sql.ex.ru,但沒有那麼有用。

+1

我會建議使用SQL小提琴練習上:http://sqlfiddle.com/ – Kane

+0

@Kane我想你誤解了最後一部分,海報正在尋找解決方案的練習,而不是他可以嘗試的網站。 –

+0

Itzik Ben-Gan的書[Microsoft SQL Server 2012 T-SQL Fundamentals](http://www.amazon.com/dp/0735658145)是一個很棒的教程,有很多很好的練習和解決方案。 –

回答

2
select firstname, lastname, salary 
from 
(
select 
    employee.*, details.salary, 
    row_number() over (order by salary desc) salaryrank 
from 
     employee 
inner join 
     details 
      on employee.empid = details.empid 
) v 
where salaryrank=3 

至於與解決方案SQL的問題,爲什麼不看計算器本身?找到一個問題,並看看你如何得到答案。然後看看最好的評分答案是

+1

您的查詢存在一個小錯誤,因爲員工和詳細信息都有empid列。您需要在子查詢中指定'select employee。*,details.salary,row_number()' –

+0

@TerrenceTan True。調整。 – podiluska

+0

如果記錄有兩個或更多相同的第二高薪水,row_number()將不起作用,我們可以使用dense_rank()來代替。在sql server中不存在限制 – TNA

0

查找答案如下。

select * from empsal e where 
3 =(select count(distinct empsal) from empsal where e.empsal<=empsal); 

如果您需要第二個最高工資,請用'2'代替'3'。

0
SELECT 
    p.firstname, 
    p.lastname, 
    d.salary 
FROM 
    Persons p, 
    Details d 
where 
    p.empid=d.empid 
order by 
    d.btID desc 
limit 2,1; 
+1

。 –

0

假設,如果你有表有以下字段值

enter image description here

詳細

enter image description here

現在,如果你想找到第三最高工資。然後,下面的查詢將給你以下結果集。

enter image description here

輸出:

enter image description here