Компиляция четырех решений для проблемы:
Первое решение - использование подзапроса
ВЫБЕРИТЕ МАКС (зарплата) от сотрудника ---- Этот запрос даст вам максимальную зарплату
Теперь используйте вышеуказанный запрос как подзапрос, чтобы получить следующую самую высокую зарплату, как показано ниже:
SELECT MAX(salary) FROM employee WHERE salary <> (SELECT MAX(salary) from Employee)
- этот запрос даст вам вторую самую высокую зарплату
Теперь, если вы хотите, чтобы имя сотрудника (ов) получало вторую самую высокую зарплату, используйте приведенный выше запрос как подзапрос, как показано ниже
SELECT name from employee WHERE salary =
(SELECT MAX(salary) FROM employee WHERE salary <> (SELECT MAX(salary) from Employee)
- этот запрос даст вам вторую самую высокую зарплату)
Второе решение - использование производной таблицы
SELECT TOP 2 DISTINCT(salary) FROM employee ORDER BY salary DESC
- Это даст вам две самые высокие зарплаты. То, что вы делаете здесь, - это упорядочиваете зарплаты в порядке убывания, а затем выбираете две верхние зарплаты.
Теперь закажите вышеупомянутый набор результатов в порядке возрастания по зарплате и получите ТОП 1
SELECT TOP 1 salary FROM
(SELECT TOP 2 DISTINCT(salary) FROM employee ORDER BY salary DESC) AS tab
ORDER BY salary
Третье решение - Использование коррелированного подзапроса
SELECT name, salary FROM Employee e WHERE 2=(SELECT COUNT(DISTINCT salary) FROM Employee p WHERE e.salary<=p.salary)
Четвертое решение - Использование оконной функции
;WITH T AS
(
SELECT *, DENSE_RANK() OVER (ORDER BY Salary Desc) AS Rnk
FROM Employees
)
SELECT Name
FROM T
WHERE Rnk=2;