sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo obtener el enésimo salario más alto de una tabla sin usar TOP y subconsulta?

Pruebe una CTE - Expresión de tabla común:

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

Esto obtiene los 5 mejores salarios en orden descendente:puede jugar con RowNumn valor y básicamente recuperar cualquier porción de la lista de salarios.

Hay otras funciones de clasificación disponible en SQL Server que también se puede usar, p. hay NTILE que dividirá sus resultados en n grupos de igual tamaño (lo más cerca posible), por lo que podría, p. crea 10 grupos como este:

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

Esto dividirá sus salarios en 10 grupos de igual tamaño, y el que tiene NTile=1 es el grupo de salarios "TOP 10%".