-
Notifications
You must be signed in to change notification settings - Fork 0
/
176. Second Highest Salary.sql
73 lines (64 loc) · 1.6 KB
/
176. Second Highest Salary.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
176. Second Highest Salary
Table: Employee
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| salary | int |
+-------------+------+
id is the primary key column for this table.
Each row of this table contains information about the salary of an employee.
Write an SQL query to report the second highest salary from the Employee table.
If there is no second highest salary, the query should report null.
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 for Second Highest Salary
SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary < (SELECT MAX(salary) FROM Employee);
-- Using CTE Solution1
WITH CTE AS (SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
LIMIT 2)
SELECT salary AS SecondHighestSalary
FROM CTE
ORDER BY salary ASC
LIMIT 1;
-- Using CTE Solution2
WITH CTE AS (SELECT salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS DenseRank
FROM Employee)
SELECT salary AS SecondHighestSalary
FROM CTE
WHERE DenseRank = 2;