sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan henter man den n. højeste løn fra en tabel uden at bruge TOP og underforespørgsel?

Prøv et CTE - Common Table Expression:

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

Dette får de 5 bedste lønninger i faldende rækkefølge - du kan spille med RowNumn værdi og stort set hente ethvert udsnit fra listen over lønninger.

Der er andre rangeringsfunktioner tilgængelig i SQL Server, der også kan bruges - f.eks. der er NTILE som vil opdele dine resultater i n grupper af lige store (så tæt som muligt), så du kan f.eks. opret 10 grupper som denne:

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

Dette vil opdele dine lønninger i 10 grupper af samme størrelse - og den med NTile=1 er løngruppen "TOP 10%".



  1. MySQL-forespørgsel - find nye brugere pr. dag

  2. Vælg en enkelt kolonneværdi og gem den i variabel oracle sql

  3. Sådan indstilles navigationsformularen som standardformular i Microsoft Access

  4. SQL Server 2016:Opret en tabel fra et SQL-script