2012-08-31 38 views
0

第三高的薪水我有兩個表:SQL查詢來找出涉及兩個表

人:

 
empid(primary key) 
firstname 
lastname 
email 

詳情:

 
Did(primary key) 
salary 
designation 
empid 

現在我想選擇名字,姓氏,工資第三高的員工的工資。

保持它簡單,因爲我是一個開始。

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

+1

這聽起來像作業。你有什麼想法?對於很好的SQL練習,請查看http://sqlzoo.net/ –

+0

有一點幫助:http://www.w3schools.com/sql/sql_top.asp – Resh32

+0

還有一些幫助:你需要加入你的表,做一個計數,按工資降序排序,並使用頂級功能。 – Resh32

回答

1

試試這個:

SELECT top 1 P.*,a.salary 
FROM  Persons p 
JOIN 
     (select top 3 empid,salary from Details order by salary desc)a 
ON  p.empid=a.empid 
ORDER BY p.salary 

;WITH CTE AS 
(SELECT *, 
     ROW_NUMBER() OVER (ORDER BY SALARY DESC) AS ROW_NUM 
FROM DETAILS) 
SELECT * 
FROM PERSONS P 
JOIN CTE C 
ON P.EMPID=C.EMPID 
where c.ROW_NUM=3 
+0

謝謝!但我只是通過試錯法發現了一個更簡單的版本!不管怎麼說,多謝拉! – Arbaaz

+0

@ user1557976:請張貼你的答案.. –

+0

只是看到我的答案是否有漏洞。 – Arbaaz

0
SELECT TOP 1 persons.FirstName, persons.LastName, Salary 
FROM persons inner join Details 
ON persons.empid=Details.empid 
where Salary not in(SELECT TOP 2 Salary from Details ORDER BY Salary DESC) 
order by Salary desc 
+0

這是我發現自己的答案,如果有人看到任何漏洞都糾正我。 – Arbaaz

1

這裏是一個小把戲。它的作用是在每一行上添加一個序列號或行號,按薪水排序。然後它只是選擇第三個:

select FirstName, LastName, Salary 
from (select p.FirstName, p.LastName, d.salary, 
      row_number() over (order by salary desc) as seqnum 
     from persons p join 
      details d 
      on p.empid = d.empid 
    ) t 
where seqnum = 3 

row_number()函數執行此計算。這是一個非常有用的功能,您可以添加到您的SQL知識。

+0

對於像我這樣的初學者來說,它是一個有用的提示,嗯,有一個問題,但不管什麼? – Arbaaz