Problem
Query
First implementation
SELECT
IF(COUNT(*) = 0, NULL, e1.salary) as SecondHighestSalary
FROM
Employee as e1,
(
SELECT *
FROM Employee
GROUP BY salary
ORDER BY salary DESC
LIMIT 1 OFFSET 1
) as e2
WHERE
e1.id = e2.id
Second implementation
SELECT
IF(COUNT(*) = 0, NULL, e1.salary) as SecondHighestSalary
FROM
Employee as e1,
(
SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
LIMIT 1 OFFSET 1
) as e2
WHERE
e1.salary = e2.salary
Editorial Solution
Approach 1: Using sub-query and LIMIT
clause
SELECT
(SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary
;
Approach 2: Using IFNULL
and LIMIT
clause
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary