SQL — Второй по величине

#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. Кстати, это коррелированный подзапрос, и я не могу отделаться от ощущения, что это слишком усложняет проблему