Трюк дня. Найти второе место по зарплате. Решение.



Решение 1: использование IFNULL и OFFSET



• IFNULL(expression, alt): эта функция возвращает аргумент expression в случае, если он не равен null. В противном случае возвращается аргумент alt. Мы используем эту функцию чтобы возвратить null, если в таблице не окажется искомого значения.

• OFFSET: этот оператор используется с ORDER BY для того чтобы отбросить первые n строк. Используется для получения второго по величине значения.



SELECT

IFNULL(

(SELECT DISTINCT salary

FROM employee

ORDER BY salary DESC

LIMIT 1

OFFSET 1

), null) AS sec_salary

FROM employee

LIMIT 1





Решение 2: использование MAX



Здесь выбирается самое большое значение зарплаты, не равное максимальной зарплате, полученной по всей таблице. В результате мы и получаем то, что нужно — вторую по величине зарплату.



SELECT

MAX(salary) AS sec_salary

FROM Employee

WHERE salary != (SELECT MAX(salary) FROM employee)




#tips