Second Highest Salary
Write an SQL query to report the second highest salary from the
Employee
table. If there is no second highest salary, the query should reportnull
.The query result format is in the following example.
錯誤解法
SELECT
SecondHighestSalary
FROM
(
SELECT
rank() over ( ORDER BY salary DESC ) AS rr,
`salary` AS SecondHighestSalary
FROM
( SELECT DISTINCT salary FROM Employee ) a UNION ALL
SELECT NULL
,
NULL
FROM
`Employee`
) a
LIMIT 1,
1
- 先去除重複排序
- 排rank
- 加null
SELECT
SecondHighestSalary
FROM
(
SELECT
`salary` AS SecondHighestSalary
FROM
( SELECT DISTINCT salary FROM Employee ) a UNION ALL
SELECT NULL
FROM
`Employee`
) a
LIMIT 1,
1
- 去掉rank 後排序更快
SELECT IFNULL
(
(SELECT MAX(Salary)
FROM Employee
WHERE Salary < (SELECT MAX(Salary)
FROM Employee)),
NULL
) as SecondHighestSalary;
- 最佳解
- 選擇max 但 排除掉max
- (選擇去掉跑最快的最快那一個)
SELECT
(
SELECT DISTINCT
Salary
FROM
Employee
ORDER BY
Salary DESC
LIMIT 1 OFFSET 1
) AS SecondHighestSalary
- distinct後
- 排序
- 後limit 1 offset 1
- 在包成select