gpt4 book ai didi

SQL查询从工资表中查找第N最高的工资

转载 作者:行者123 更新时间:2023-12-01 23:06:18 25 4
gpt4 key购买 nike

如何在 SQL Server 中包含工资的表中找到第 N 个最高的工资?

最佳答案

您可以使用通用表表达式 (CTE) 来得出答案。

假设您的薪资表中有以下薪资:

 EmployeeID  Salary
--------------------
10101 50,000
90140 35,000
90151 72,000
18010 39,000
92389 80,000

我们将使用:

DECLARE @N int
SET @N = 3 -- Change the value here to pick a different salary rank

SELECT Salary
FROM (
SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N

这将为每一行创建一个行号,然后按薪资降序排序,然后检索第三行(其中包含第三高的记录)。

<小时/>

对于那些不想要 CTE(或陷入 SQL 2000)的人:

[注意:这比上面的例子表现明显差;将它们与执行计划并行运行显示 CTE 的查询成本为 36%,子查询的查询成本为 64%]:

SELECT TOP 1 Salary
FROM
(
SELECT TOP N Salary
FROM Salaries
ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC

其中 N 由您定义。

SalarySubquery 是我为子查询或括号中的查询指定的别名。

子查询的作用是选择前 N 个薪水(在本例中我们将说 3),并按最高薪水对它们进行排序。

如果我们想查看第三高的工资,子查询将返回:

 Salary
-----------
80,000
72,000
50,000

然后,外部查询从子查询中选择第一个薪水,只不过这次我们对其进行升序排序,即从小到大排序,因此 50,000 将是第一个升序排序的记录。

如您所见,50,000 确实是示例中的第三高薪水。

关于SQL查询从工资表中查找第N最高的工资,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com