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

Jak pobrać n-tą najwyższą pensję z tabeli bez używania TOP i podzapytania?

Wypróbuj CTE — wspólne wyrażenie tabelowe:

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

Daje to 5 najlepszych wynagrodzeń w kolejności malejącej - możesz grać z RowNumn wartość i zasadniczo pobierz dowolny wycinek z listy wynagrodzeń.

Istnieją inne funkcje rankingowe dostępne w SQL Server, które również można wykorzystać - m.in. jest NTILE która podzieli Twoje wyniki na n grup o równej wielkości (tak blisko, jak to możliwe), dzięki czemu możesz np. utwórz 10 grup w ten sposób:

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

To podzieli twoje pensje na 10 grup o równej wielkości - i tę z NTile=1 to grupa wynagrodzeń „TOP 10%”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja nie powiodła się podczas konwersji z ciągu znaków na unikalny identyfikator

  2. Jak skopiować dane i tabele bazy danych z jednej bazy danych do drugiej?

  3. TSQL PIVOT WIELE KOLUMN

  4. Uprawnienia do tworzenia kopii zapasowych

  5. Programowe tworzenie pliku bazy danych SQL Server CE