查找第 N 高工资的 SQL 查询

编写一个 SQL Server 查询来查找第 N 高的工资、第 2 高的工资或第 3 高的工资是最常见的面试问题。在本文中,我们将向您展示使用示例编写查找第 N 高工资查询的最佳可能方法。

为了演示此查找第 N 高工资的查询,我们使用了“员工详细信息”表。

Employee Table 1

查找第 N 高工资的 SQL 查询示例

在此 SQL Server 示例中,我们将使用 派生表 概念来查找第 3 高的工资。

SELECT TOP 1 [FirstName]
,[LastName]
,[Education]
,[YearlyIncome] AS 'Highest Salary'
,[Sales]
FROM (
SELECT DISTINCT TOP 3 [FirstName]
,[LastName]
,[Education]
,[YearlyIncome]
,[Sales]
FROM [EmployeesDetails]
ORDER BY [YearlyIncome] DESC
) EMP
ORDER BY [YearlyIncome] ASC

FROM 子句中的查询选择按工资降序排序的前三名员工。我建议您参考 Top 子句和 Order by。如果您想要第 2 高的工资,则在 Top 子句中将 3 替换为 2。

Find income 2

主输出:并且最 频繁 查询按升序返回第一个记录。

SQL Query to Find Nth Highest Salary 3

查找第 4 高工资的 SQL 查询示例

以下查询用于查找第 4 高的工资。为此,我们使用 ROW NUMBER 概念来查找第 4 高的工资。您也可以使用任何 排名函数,例如 RankDense RankNtile 来获得相同的结果。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[YearlyIncome]
      ,[ROW NUMBER] AS 'Highest Salary'
      ,[Sales]
FROM (
        SELECT [FirstName]
	      ,[LastName]
	      ,[Education]
	      ,[YearlyIncome]
	      ,ROW_NUMBER() OVER (
		                   ORDER BY [YearlyIncome] DESC
		                  ) AS [ROW NUMBER]
	      ,[Sales]
	FROM [EmployeesDetails] 
      ) EMP 
WHERE [ROW NUMBER] = 4

如您所见,内部查询中的 Row_Number() 根据年收入为每个员工分配排名。

Query to Find Nth Highest Salary 4

我们从内部查询中选择所需的排名。如果您想要第 2 高的工资,则在 WHERE 子句中将 4 替换为 2。

Query to Find Nth Highest Salary 5

您也可以使用 CTE 来获得相同的结果。

查找每个组中第 N 高工资的 SQL 查询

我们查找每个组中的第 2 高工资。这与我们在上一个示例中使用的查询相同,但我们添加了 PARTITION BY 子句来分隔组。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[YearlyIncome]
      ,[ROW NUMBER] AS 'Highest Salary'
      ,[Sales]
FROM (
        SELECT [FirstName]
	      ,[LastName]
	      ,[Education]
	      ,[YearlyIncome]
	      ,ROW_NUMBER() OVER (
		                   PARTITION BY [Education]
                                   ORDER BY [YearlyIncome] DESC
		                  ) AS [ROW NUMBER]
	      ,[Sales]
	FROM [EmployeesDetails] 
      ) EMP 
WHERE [ROW NUMBER] = 2

如您所见,内部查询中的 Row_Number() 根据年收入为每个分区(教育)分配排名。

Inner Query 6

我们从内部查询中选择所需的排名。同样,如果您想要第 3 高的工资,则在 WHERE 子句中将 2 替换为 3。

Query to Find Nth Highest Salary 7

评论已关闭。