#mysql #sql
Вопрос:
Я пытаюсь решить проблему с кодом ниже.
https://leetcode.com/problems/second-highest-salary
Что не так с этим ответом? Приведенный ниже ответ не принимается
select t.salary as SecondHighestSalary from
(
select salary
from employee
order by salary desc
limit 1 offset 1
) as t
Комментарии:
1. Что не так с:
SELECT DISTINCT salary secondhighestsalary FROM employee ORDER BY salary DESC LIMIT 1,1;
?2. Два сотрудника могли бы иметь одинаковую зарплату.
3. @GordonLinoff — это хорошая мысль.
Ответ №1:
Оба приведенных ниже ответа принимаются
Мы можем использовать подзапрос, как показано ниже:
SELECT MAX(salary) AS secondhighestsalary
FROM employee
WHERE salary < (SELECT MAX(salary)
FROM employee);
или в качестве альтернативы вы можете использовать временную таблицу:
with temp as
(
SELECT MAX(salary) as salary FROM employee
)
select max(salary) as secondhighestsalary from employee where salary <(select salary from temp);
Ответ №2:
Это Принято.
select salary as SecondHighestSalary
from employee a
where 1 = (select count(1) from employee b where b.salary < a.salary )
Ваш запрос не сработает, если в таблице дважды появится самая низкая зарплата.
Приведенный выше запрос использует связанный с ним подзапрос, то есть для каждой строки во внешней таблице подзапрос (или внутренний запрос) будет выполнен один раз.
Более того, это будет работать за N-ю самую высокую зарплату. Если бы спросили о 10-й самой высокой зарплате, просто замените 1 в приведенном выше запросе на 9.
Комментарии:
1. Кстати, это коррелированный подзапрос, и я не могу отделаться от ощущения, что это слишком усложняет проблему