176. Second Highest Salary

Description of Problem

Table: Employee

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
id is the primary key (column with unique values) for this table.
Each row of this table contains information about the salary of an employee.

Write a solution to find the second highest salary from the Employee table. If there is no second highest salary, return null (return None in Pandas).

The result format is in the following example.

Example 1:

Input: 
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
Output: 
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
Example 2:

Input: 
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
Output: 
+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

Solution

Tags: SQL Subquery

Code 1 (MySQL) - Using ROW_NUMBER()

-- Write your MySQL query statement below
SELECT IF(MAX(row_num) > 1, t.salary, NULL) AS SecondHighestSalary
FROM (
    SELECT ROW_NUMBER() OVER (
        ORDER BY e.salary DESC
    ) AS row_num, COUNT(1) AS row_count, e.salary
    FROM Employee e
    GROUP BY e.salary
) t
WHERE row_num = 2;

Code 2 - Using plainly subquery (MySQL)

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary < (SELECT MAX(Salary) FROM Employee)