SQL子查询返回第n个最高工资以及姓名、城市等
为发布一个类似于已被问过多次的问题而道歉。我找不到另一个线程,该线程将返回其他字段以及薪资字段。我的SQL在下面,我只是用我正在查找的数字或替换3。但是,我不知道如何从tblPerson返回Name、Age和City字段。我知道需要某种类型的子查询,但我还没有弄明白。任何帮助都将不胜感激。提前谢谢你SQL子查询返回第n个最高工资以及姓名、城市等,sql,sql-server,ssms,Sql,Sql Server,Ssms,为发布一个类似于已被问过多次的问题而道歉。我找不到另一个线程,该线程将返回其他字段以及薪资字段。我的SQL在下面,我只是用我正在查找的数字或替换3。但是,我不知道如何从tblPerson返回Name、Age和City字段。我知道需要某种类型的子查询,但我还没有弄明白。任何帮助都将不胜感激。提前谢谢你 Select TOP 1 Salary FROM (Select DISTINCT TOP 3 Salary FROM tblPerson Order By Salar
Select TOP 1 Salary
FROM
(Select DISTINCT TOP 3 Salary
FROM tblPerson
Order By Salary DESC) Result
ORDER BY Salary
只需将您希望子查询返回的内容添加到select子句中,即可将您希望包含在
result
表中的列。但也要记住在外部查询中包含这些列,以便它们出现在最终结果中。例如:
Select TOP 3 result.salary, result.name, result.age, result.city
FROM
(Select DISTINCT TOP 3 tblPerson.salary, tblPerson.name,
tblPerson.age,tblPerson.city
FROM tblPerson
Order By Salary DESC) result
ORDER BY Salary
子查询中的结果表如下所示:
salary name age city
90000 Mr.derp 21 Minneapolis
80000 Ms.herp 52 St.Paul
70000 Mr.blah 89 Fakecity
它有三行是关键字TOP3
的原因,列是select
子句中tblPerson.salary、tblPerson.name、tblPerson.age、tblPerson.city
的结果。然后我们可以简单地使用外部查询从这个表中进行选择
如果需要每一列,您可以使用选择*
,或者使用列名指定所需的列。您可以在TOP n
中更改n
,以查看要从顶部选择的行数。未在计算机上尝试,但请告诉我此操作的结果/错误:
Select TOP 1 a.Salary, a.Name, a.Age, a.City
FROM
tblPerson a
inner join
(Select DISTINCT TOP 3 Salary
FROM tblPerson
Order By Salary DESC
)Result
on a.Salary = Result.Salary
ORDER BY a.Salary
我使用“选择顶部”方法看到了其他答案。我更倾向于这样,但只是个人偏好
SELECT * FROM (
SELECT *
,Row_Number() OVER(ORDER BY Salary DESC) AS rown
FROM tblPerson
) AS x WHERE rown = '3'
行号按薪资顺序分配给表中的每一行。然后可以使用where来选择第n行,在本例中为salary
要获取与第n个薪资匹配的所有记录的列表,请执行以下操作:
SELECT * FROM tblPerson as p
INNER JOIN (
SELECT Salary FROM(
SELECT Salary
,Row_Number() OVER(ORDER BY Salary DESC) AS rown
FROM tblPerson
) AS x1 WHERE rown = '3'
) AS x2 on x2.salary = p.salary
这是一个很好的电话,但是我遇到了一个问题。例如,如果我想选择第四高的薪水,但如果有多个人拥有相同的薪水,我想返回他们所有人呢?@Chuck0185这可以使用Row_Number()方法实现,但需要加入。我可以在示例中进行编辑,但O.KOO的解决方案可能更简洁。如果我的解决方案有效或出现错误,请告诉我。但是,这不会返回关系。您可以使用rank()获取关系