LeetCode 176 第二高的薪水

2022-09-17 13:24:15 字數 2721 閱讀 9404

編寫乙個 sql 查詢,獲取employee表中第二高的薪水(salary)

+----+--------+

| id | salary |

+----+--------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

+----+--------+

例如上述employee表,sql查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回null

+---------------------+

| secondhighestsalary |

+---------------------+

| 200 |

+---------------------+

第一次解答報錯。。。

---- oracle ----

/* write your pl/sql query statement below */

select salary as secondhighestsalary

from

( select salary,

rownum as rn

from

(select salary

from employee

order by salary desc

) b) cwhere c.rn = 2 ---- 執行報錯 當資料只有1行時 執行為空 而不是null

第二次解答。。。依舊報錯

---- oracle ----

/* write your pl/sql query statement below */

select salary as secondhighestsalary

from

( select salary,

row_number() over(order by salary desc) as rn

from employee

) cwhere c.rn = 2 ---- 依舊報錯

解答一
---- oracle ----

/* write your pl/sql query statement below */

select max(salary) as secondhighestsalary

from empolyee

where salary <> (select max(salary) from employee) ---- 672ms

解答二

修改第一次出錯的版本,新增判斷後再次嘗試。。。

---- oracle ----

select salary as secondhighestsalary

from

( select salary

from

( select salary,

rownum as rn

from

(select distinct(salary)

from employee

order by salary desc

) b) c

where c.rn = 2

union all

select null from dual

)where rownum = 1 -- 未針對薪水進行去重操作 增加distinct

-- 不新增distinct還執行報錯 新增之後通過

---- 861ms

解答三

好久沒用過mysql,用法都忘光了。。

使用子查詢和limit子句

---- mysql ----

select

( select distinct salary

from employee

order by salary desc

limit 1 offset 1

) as secondhighestsalary; ---- 112ms 好快

解答四

為了解決null的問題,可以使用ifnull函式

---- mysql ----

select

ifnull(

(select distinct salary

from employee

order by salary desc

limit 1 offset 1

),null) as secondhighestsalary ---- 108ms

去重、排序、獲取第二個、返回為null時設定返回null

oracle中rownum的使用必須要包含第一條記錄,也就是類似rownum <= 10,所以不能使用rownum = 2提取第2行資料,必須利用巢狀查詢實現。

group by的速度比distinct速度要快。

Leetcode 176 第二高的薪水

編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary id salary 1 100 2 200 3 300 複製 例如上述 employee 表,sql查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。secondhighestsa...

Leetcode176 第二高的薪水

題目 編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary id salary 1 100 2 200 3 300 例如上述 employee 表,sql查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。secondhighestsa...

Leetcode 176 第二高的薪水

題目難度 簡單題目描述 編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary 例如上述 employee 表,sql查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。預期結果 正確答案 select max salary as sec...