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


В 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
Они работают в 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
Опять же, не положительно, если синтаксис в точности правильный, но подход работает.
Оба запроса возвращают одно число, которое является 5-й по величине зарплатой. Вы их пробовали?
Вы можете попробовать что-нибудь вроде:
select salary
from Employees a
where 5=(select count(distinct salary)
from Employees b
where a.salary > b.salary)
order by salary desc
Этот подход будет работать, но его производительность будет низкой. Это O (n ^ 2), поскольку для каждого сотрудника во внешнем запросе необходимо заново сканировать всю таблицу.
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)
Вы можете найти любое количество самых высоких зарплат с помощью этого запроса.
Вы можете найти его, используя этот запрос:
select top 1 salary
from (select top 5 salary
from tbl_Employee
order by salary desc) as tbl
order by salary asc
Приведенный ниже запрос позволяет получить самую высокую зарплату после определенного имени сотрудника.
Вы только посмотрите на это!
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
select * from employee2 e
where 2=(select count(distinct salary) from employee2
where e.salary<=salary)
это работает
Чтобы найти 5-ю по величине зарплату из базы данных, введите запрос ..
select MIN(esal) from (
select top 5 esal from tbemp order by esal desc) as sal
его работа проверьте это
SELECT MIN(Salary) FROM (
SELECT TOP 2 Salary FROM empa ORDER BY Salary DESC
) AS TopFive
Он работает правильно, используйте его.
Я хочу, чтобы это было в одном запросе с использованием процентов ... как это получить? выберите верхние 5 процентов столбцов из порядка имен таблиц по убыванию, используя это, мы получаем первые 5 записей, но я хочу только 5-ю.