Как найти пятую самую высокую зарплату в одном запросе в SQL Server

Как найти пятую самую высокую зарплату в одном запросе в SQL Server

11.12.2008 06:06:46
9 ОТВЕТОВ

В SQL Server 2005 и 2008 создайте ранжированный запрос подвыбора, затем добавьте предложение where, где rank = 5.

select
  *
from
(
  Select
    SalesOrderID, CustomerID, Row_Number() Over (Order By SalesOrderID) as RunningCount
  From
    Sales.SalesOrderHeader
  Where
    SalesOrderID > 10000
  Order By
    SalesOrderID 
) ranked
where 
  RunningCount = 5
22
9.04.2012 09:41:16

Они работают в SQL Server 2000

DECLARE @result int

SELECT TOP 5 @result = Salary FROM Employees ORDER BY Salary DESC

Синтаксис должен быть близким. Я не могу проверить это в данный момент.

Или вы можете пойти с подзапросом:

SELECT MIN(Salary) FROM (
    SELECT TOP 5 Salary FROM Employees ORDER BY Salary DESC
) AS TopFive

Опять же, не является положительным, если синтаксис точно правильный, но подход работает.

4
9.04.2012 09:41:24
Я хочу это в одном запросе с использованием процентов ... как это получить? выберите верхнее 5-процентное имя столбца из порядка имен таблиц, используя это, мы получаем первые 5 записей, но я хочу только 5-ю.
Yogini 11.12.2008 06:45:10
Оба запроса возвращают одно число, которое является 5-й по величине зарплатой. Вы пробовали их?
recursive 11.12.2008 19:30:04

Вы можете попробовать что-то вроде:

select salary
from Employees a
where 5=(select count(distinct salary)
         from Employees b
         where a.salary > b.salary)
order by salary desc
0
29.06.2011 14:09:16
Этот подход будет работать, но имеет низкую производительность. Это O (n ^ 2), поскольку для каждого сотрудника во внешнем запросе необходимо снова сканировать всю таблицу.
recursive 11.12.2008 19:39:41
SELECT TOP 1 salary
FROM (
    SELECT DISTINCT TOP n salary
    FROM employee
    ORDER BY salary DESC) a
ORDER BY salary
where n > 1 -- (n is always greater than one)

Вы можете найти любое количество самых высоких зарплат, используя этот запрос.

1
29.06.2011 14:09:42

Вы можете найти его с помощью этого запроса:

select top 1 salary 
from (select top 5 salary
      from tbl_Employee
      order by salary desc) as tbl 
order by salary asc
0
11.09.2017 19:55:42

Приведенный ниже запрос на получение максимальной заработной платы после конкретного имени сотрудника.

Просто посмотрите на это!

SELECT TOP 1 salary FROM (
    SELECT DISTINCT min(salary) salary
    FROM emp where salary > (select salary from emp where empname = 'John Hell') 
    ) a 
ORDER BY salary
0
29.06.2011 14:09:58
select * from employee2 e
where 2=(select count(distinct salary) from employee2
         where e.salary<=salary)

работает

0
29.06.2011 14:18:51

Чтобы найти 5-ую самую высокую зарплату из базы данных, запрос ...

select MIN(esal) from (
    select top 5 esal from tbemp order by esal desc) as sal

его работа проверить это

1
29.06.2011 14:18:42
SELECT MIN(Salary) FROM (
    SELECT TOP 2 Salary FROM empa ORDER BY Salary DESC
) AS TopFive

Он работает правильно, пожалуйста, используйте его.

1
29.06.2011 14:18:49