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