力扣資料庫 176 第二高的薪水

2021-09-26 16:24:09 字數 3086 閱讀 3702

create

table

ifnot

exists employee (id int

, salary int

)truncate

table employee

insert

into employee (id, salary)

values

('1'

,'100'

)insert

into employee (id, salary)

values

('2'

,'200'

)insert

into employee (id, salary)

values

('3'

,'300'

)

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

+

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

| id | salary |

+----+--------+|1

|100||

2|200||3

|300|+

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

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

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

| secondhighestsalary |

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

| 200 |

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

思路:獲取第二高的薪水,不存在第二高的薪水則返回null。

分析:什麼情況下可能沒有存在第二高薪水,該返回為null呢?

情況1:只有一行記錄,那麼就沒有第二高的薪水。

情況2:有兩行記錄,這兩行記錄的薪水數值一樣,也就不存在有第二高薪水。

以上兩種情況需要返回為null,否則就直接返回第二高薪水。

方法1:order by + ifnull + limit + distinct

解題步驟:

1.首先我們先對薪水進行排序(降序)。

select  salary as secondhighestsalary 

from employee

order

by salary desc

結果:

order by 列名 [desc]:對指定的列名進行排序,預設為公升序,desc為降序。

2.我們獲取排序好的的第二行記錄就可以得到第二高薪水了。

select salary as secondhighestsalary  

from employee

order

by salary desc

limit

1offset

1

結果:

limit 行數 offset 位置偏移量:在指定偏移量位置讀取指定行數。

3.那如果像情況1那樣,只有一行記錄呢? 也就是沒有第二高薪水。可以使用ifnull函式來解決。

select ifnull(

(select salary

from employee

order

by salary desc

limit

1offset1)

,null

)as secondhighestsalary;

ifnull(expression, value)ifnull函式如果第乙個引數的表示式 expression 為 null,則返回第二個引數的備用值。

例如:

select ifnull(

null

,"runoob"

);

返回:

runoob
3.那如果像情況2那樣,有兩行記錄,但記錄重複呢? 也就是沒有第二高薪水。可以使用distinct

select ifnull(

(select

distinct salary

from employee

order

by salary desc

limit

1offset1)

,null

)as secondhighestsalary;

方法2: group by + order by + ifnull + limit
select ifnull(

(select salary from employee

group

by salary

order

by salary desc

limit

1offset1)

,null

)as secondhighestsalary

order by 列名:對指定列名進行分組。

耗時:100ms

方法3:使用子查詢+max函式

select

max(salary)

as secondhighestsalary

from employee

where salary <

(select

max(salary)

from employee

)

max(列名):max 函式返回一列中的最大值。null 值不包括在計算中。

力扣資料庫題目176第二高的薪水

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

176 第二高的薪水

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

176 第二高的薪水

編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary idsalary 1100 2200 3300 例如上述 employee 表,sql查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。secondhighestsalary 20...