LeetCode:(SQL)(SQL 50)(Advanced String Functions / Regex / Clause) Second Highest Salary
題目連結:https://leetcode.com/problems/second-highest-salary/description/?envType=study-plan-v2&envId=top-sql-50
LeetCode:(SQL)(SQL 50)(Advanced String Functions / Regex / Clause) Second Highest Salary
題意解析
- 給定多個薪資,薪資可能重複。
- 找出第二高的薪資,可能多個第二高薪資,回傳一個就好。
- 如果沒有第二高的薪資,回傳 null
解題思維
- 用 Dense_Rank,多個第一名時並列第一,同時多個第二也可以並列第二不會變成第三第四等名次

- 找出 dense_rank = 2 ,同時 limit 1 確保一定只回傳一個
實作程式碼
# Write your MySQL query statement below
WITH get_seq AS (
SELECT
salary
,DENSE_RANK()OVER(ORDER BY salary DESC) AS seq
FROM Employee
)
# 用 select () AS SecondHighestSalary 包住,確保回傳是空值時能夠是 null
SELECT (
# limit 1 確保只回傳一個
SELECT
salary
FROM get_seq
WHERE seq = 2
LIMIT 1
) AS SecondHighestSalary
解題思維二
- 這題預設是要用 window function 等進階語法,但其實可以完全不用就解出來
- 取出不重複,前兩高的薪資
- 如果沒有第二高的薪資,回傳null,否則回傳第二高薪資
實作程式碼二
# Write your MySQL query statement below
# 取不重複薪資,強制只取出最高的兩個不重複薪資
# 有可能是空值
WITH get_top_2 AS (
SELECT DISTINCT
salary
FROM Employee
ORDER BY salary DESC
LIMIT 2
)
# 當沒有兩筆薪資,代表不存在第二高薪資,回傳 null
# 有兩筆薪資就回傳最小值,也就是第二高
SELECT
CASE
WHEN COUNT(*) < 2 THEN NULL
ELSE MIN(salary)
END AS SecondHighestSalary
FROM get_top_2 메타데이터
- post_id
- aa91b2654580
- slug
- leetcode-sql-sql-50-advanced-string-functions-regex-clause-second-highest-salary-aa91b2654580
- url
- https://medium.com/sherry-yh-li/leetcode-sql-sql-50-advanced-string-functions-regex-clause-second-highest-salary-aa91b2654580
- canonical_url
- https://medium.com/sherry-yh-li/leetcode-sql-sql-50-advanced-string-functions-regex-clause-second-highest-salary-aa91b2654580
- author_url
- https://medium.com/@a78800062000
- status
- ok
- fetched_at
- 2026-07-14 10:09:25