Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie SQL, aby znaleźć N-tą najwyższą pensję z tabeli wynagrodzeń

Aby uzyskać odpowiedź, możesz użyć wspólnego wyrażenia tabelowego (CTE).

Załóżmy, że w tabeli Wynagrodzenia masz następujące pensje:

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

Użyjemy:

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

Spowoduje to utworzenie numeru wiersza dla każdego wiersza po posortowaniu go według wynagrodzenia w kolejności malejącej, a następnie pobraniu trzeciego wiersza (zawierającego trzeci najwyższy rekord).

  • Skrzypce SQL

Dla tych z Was, którzy nie chcą CTE (lub utknęli w SQL 2000):

[Uwaga :to działa zauważalnie gorzej niż w powyższym przykładzie; uruchomienie ich obok siebie z planami wykonania pokazuje koszt zapytania wynoszący 36% dla CTE i 64% dla podzapytania]:

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

gdzie N jest zdefiniowane przez Ciebie.

SalarySubquery jest aliasem, który nadałem podzapytaniu lub zapytaniu w nawiasach.

Podzapytanie wybiera najwyższe pensje N (powiemy 3 w tym przypadku) i zamawia je według największej pensji.

Jeśli chcemy zobaczyć trzecią najwyższą pensję, podzapytanie zwróci:

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

Zewnętrzne zapytanie następnie wybiera pierwszą pensję z podzapytania, z tym że tym razem sortujemy je rosnąco, od najmniejszej do największej, więc 50 000 będzie pierwszym rekordem posortowanym rosnąco.

Jak widać, 50 000 to rzeczywiście trzecia najwyższa pensja w tym przykładzie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uniknąć pojedynczego cytatu w programie SQL Server?

  2. Proaktywne kontrole kondycji programu SQL Server, część 5:Statystyka oczekiwania

  3. Instalacja SQL Server 2017

  4. Czym są dane i informacje oraz wolumeny danych

  5. Jak ustawić wartość logiczną w SQL?