Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann man das n-thöchste Gehalt aus einer Tabelle abrufen, ohne TOP und Unterabfrage zu verwenden?

Probieren Sie einen CTE - Common Table Expression aus:

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

Dadurch erhalten Sie die Top 5 Gehälter in absteigender Reihenfolge - Sie können mit der RowNumn spielen Wert und im Grunde jede Scheibe aus der Gehaltsliste abrufen.

Es gibt andere Ranking-Funktionen verfügbar in SQL Server, der ebenfalls verwendet werden kann - z. da ist NTILE Dadurch werden Ihre Ergebnisse in n gleich große Gruppen (so eng wie möglich) aufgeteilt, sodass Sie z. Erstellen Sie 10 Gruppen wie folgt:

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

Dadurch werden Ihre Gehälter in 10 gleich große Gruppen aufgeteilt - und die mit NTile=1 ist die "TOP 10 %"-Gehaltsgruppe.