sql >> Databáze >  >> RDS >> Sqlserver

Jak získat n-tou nejvyšší mzdu z tabulky bez použití TOP a poddotazu?

Vyzkoušejte 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

Tím získáte 5 nejlepších platů v sestupném pořadí – můžete hrát s RowNumn hodnotu a v podstatě načíst jakýkoli kousek ze seznamu platů.

Existují další funkce hodnocení dostupné v SQL Server, které lze také použít - např. je tam NTILE který rozdělí vaše výsledky do n stejně velkých skupin (co nejpřesněji), takže byste mohli např. vytvořte 10 skupin takto:

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

Tím se vaše platy rozdělí do 10 stejně velkých skupin – a do skupiny s NTile=1 je skupina „TOP 10 %“ platů.



  1. Emoji se v mysql změní na otazníky

  2. SQL 'AND' nebo 'OR' je na prvním místě?

  3. Problémy při importu souboru txt do postgres pomocí php

  4. Připojení k serveru SQL někdy funguje