Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL заявка за намиране на N-та най-висока заплата от таблица със заплати

Можете да използвате Common Table Expression (CTE), за да получите отговора.

Да приемем, че имате следните заплати в таблицата Заплати:

 EmployeeID  Salary
--------------------
     10101   50,000
     90140   35,000
     90151   72,000
     18010   39,000
     92389   80,000

Ще използваме:

DECLARE @N int
SET @N = 3  -- Change the value here to pick a different salary rank

SELECT Salary
FROM (
    SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
    FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N

Това ще създаде номер на ред за всеки ред, след като бъде сортиран по заплата в низходящ ред, след което ще извлече третия ред (който съдържа третия най-висок запис).

  • SQL Fiddle

За тези от вас, които не искат CTE (или са останали в SQL 2000):

[Забележка :това се представя значително по-лошо от горния пример; изпълнението им успоредно с планове за изпълнение показва цена на заявката от 36% за CTE и 64% за подзаявката]:

SELECT TOP 1 Salary
FROM 
(
    SELECT TOP N Salary
    FROM Salaries
    ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC

където N е дефинирано от вас.

SalarySubquery е псевдонимът, който съм дал на подзаявката, или заявката, която е в скоби.

Това, което прави подзаявката, е, че избира най-добрите N заплати (ще кажем 3 в този случай) и ги нарежда с най-голямата заплата.

Ако искаме да видим третата най-висока заплата, подзаявката ще върне:

 Salary
-----------
80,000
72,000
50,000

След това външната заявка избира първата заплата от подзаявката, с изключение на това, че този път я сортираме възходящо, което сортира от най-малкото към най-голямото, така че 50 000 ще бъде първият запис, сортиран възходящо.

Както можете да видите, 50 000 наистина е третата най-висока заплата в примера.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция IndexOf в T-SQL

  2. ATAN() Примери в SQL Server

  3. Съхранената процедура или функция очаква параметър, който не е предоставен

  4. Изберете изявление, за да намерите дубликати в определени полета

  5. INFORMATION_SCHEMA срещу sysobjects