Существует два основных подхода в SQL для поиска второй по величине зарплаты: метод с подзапросом и метод с оконными функциями. Они существенно отличаются тем, как обрабатывают повторяющиеся значения зарплаты.
Этот метод находит максимальную зарплату, которая строго меньше общего максимума:
SELECT MAX(Salary) FROM Employees
WHERE Salary < (SELECT MAX(Salary) FROM Employees);
Этот метод использует DENSE_RANK() для ранжирования зарплат и фильтрует по рангу 2:
SELECT Salary FROM (
SELECT Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS rnk
FROM Employees
) t WHERE rnk = 2;
DENSE_RANK() присваивает одинаковый ранг дубликатам без пропусков в ранжированииDENSE_RANK() явно учитывает совпадения; подход с подзапросом неявно работает с уникальными значениямиИспользуй подход с DENSE_RANK() для production-запросов, где важны целостность данных и корректная обработка дубликатов. Оставь метод с подзапросом для простых окружений или совместимости с legacy-базами данных.
Подход с подзапросом SELECT MAX(Salary) FROM Employees WHERE Salary < (SELECT MAX(Salary) FROM Employees) вернёт такие же результаты, что и метод с DENSE_RANK(), когда несколько сотрудников имеют одинаковую максимальную зарплату.
Новый — ещё не проверен сообществом
Вы