小编典典

如何在不使用TOP和子查询的情况下从表中获取第n个最高薪水?

sql

最近,在一次采访中,我被要求编写一个查询,其中我必须不使用TOP和任何子查询从表中获取第n个最高薪水?

我完全困惑,因为我知道实现它的唯一方法是同时使用TOP和子查询。

请提供其解决方案。

提前致谢。


阅读 203

收藏
2021-03-17

共1个答案

小编典典

尝试CTE-通用表表达式:

WITH Salaries AS
(
    SELECT 
       SalaryAmount, ROW_NUMBER() OVER(ORDER BY SalaryAmount DESC) AS 'RowNum'
    FROM 
       dbo.SalaryTable
)
SELECT
  SalaryAmount
FROM
  Salaries
WHERE
   RowNum <= 5

这将按降序获得前5名薪水-您可以使用该RowNumn值,并基本上从薪水列表中检索任何片段。

还有其他的排名功能,可用于在SQL
Server中可用的,太-例如,有NTILE将(尽可能地)你的结果分成大小相等的n组,所以你可以创建如10组这样的:

WITH Salaries AS
(
    SELECT 
       SalaryAmount, NTILE(10) OVER(ORDER BY SalaryAmount DESC) AS 'NTile'
    FROM 
       dbo.SalaryTable
)
SELECT
  SalaryAmount
FROM
  Salaries
WHERE
   NTile = 1

这会将您的薪水分成10组,每个组的大小相同,而其中一组NTile=1是“ TOP 10%”组的薪水。

2021-03-17