2012-08-31 113 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