sql >> Database >  >> RDS >> Sqlserver

Hoe haal je het n-de hoogste salaris van een tafel zonder TOP en subquery te gebruiken?

Probeer een CTE - Algemene tabeluitdrukking:

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

Dit krijgt de top 5 salarissen in aflopende volgorde - je kunt spelen met de RowNumn waarde en haal in feite elk deel uit de lijst met salarissen.

Er zijn andere rangschikkingsfuncties beschikbaar in SQL Server die ook kan worden gebruikt - b.v. er is NTILE waarmee uw resultaten worden opgesplitst in n groepen van gelijke grootte (zo dicht mogelijk bij elkaar), zodat u b.v. maak 10 groepen op deze manier aan:

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

Dit verdeelt uw salarissen in 10 groepen van gelijke grootte - en die met NTile=1 is de "TOP 10%"-groep van salarissen.



  1. Hoe transformeer je een MSSQL CTE-query naar MySQL?

  2. Selecteer een enkele kolomwaarde en sla deze op in de variabele Oracle sql

  3. sql-triggers Ik heb een fout bij het opslaan van de kolomnaam in variabele en gebruik deze voor OLD.myvar in sql-triggers

  4. Hoe op te lossen Geen query in datareader-fout?