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

Как да извлечете n-тата най-висока заплата от таблица, без да използвате TOP и подзаявка?

Опитайте CTE - Общ табличен израз:

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

Това получава първите 5 заплати в низходящ ред - можете да играете с RowNumn стойност и основно извличане на всяка част от списъка със заплати.

Има други функции за класиране наличен в SQL Server, който също може да се използва - напр. има NTILE което ще раздели вашите резултати на n групи с еднакъв размер (възможно най-близо), така че можете напр. създайте 10 групи по следния начин:

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

Това ще раздели вашите заплати на 10 групи с еднакъв размер - и тази с NTile=1 е "ТОП 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. Филтрирайте по изходна клауза sql

  2. Изберете изявление, за да върнете родител и безкрайни деца

  3. Защо има допълнително (1 засегнат ред(а))

  4. SQL Server и уязвимостите Spectre/Meltdown

  5. как да напиша функция число към word в sql сървър