Трюк дня. Найти второе место по зарплате. Решение.
Решение 1: использование
Здесь выбирается самое большое значение зарплаты, не равное максимальной зарплате, полученной по всей таблице. В результате мы и получаем то, что нужно — вторую по величине зарплату.
#tips
Решение 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