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 + limitselect 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...