SQL—day2
题目
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)。
示例:
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
说明:所有电子邮箱都是小写字母。
预备知识
①
limit n : 表示查询结果返回前n条数据
offset n : 表示跳过x条语句
limit y offset x 分句表示查询结果跳过 x 条数据,读取前 y 条数据
select * from table limit 2 offset 1;
//limit后面跟的是2条数据,offset后面是从第1条开始读取,含义是从第1条(不包括)数据开始取出2条数据,即读取第2,3条
②
limit i,n
i:为查询结果的索引值(默认从0开始),当i=0时可省略i
n:为查询结果返回的数量
i与n之间使用英文逗号”,”隔开
select * from table limit 2,1;
含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据
③
IFNULL函数
IFNULL(expression_1,expression_2);
如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果
思路
1. 利用 limit 进行限制,此方法还可适用于求第N高的薪水
2. 如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。附加一个嵌套查询,内层查询结果为为空时,将 Null 附给 SecondHighestSalary 使得其返回值为 Null;
3. IFNULL函数保证null的情况
代码
select (
select distinct salary
from Employee
order by salary desc
limit 1,1)
as SecondHighestSalary
select IFNULL(
(select distinct Salary
from Employee
order by Salary desc
limit 1,1),null)
as SecondHighestSalary
SELECT IFNULL(
(select distinct t.Salary
from(
select salary,
rank() over (order by salary desc) as ranking
from Employee) as t
where t.ranking =2),NULL)
as 'SecondHighestSalary'
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
查询表格里第N高的薪水记录
窗口函数
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
select distinct Salary from
(select dense_rank()
over(order by Salary desc) num,
Salary from Employee) as t
where t.num=N
);
END
limit offset
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N = N-1;
RETURN (
select ifnull(
(select distinct salary
from Employee
order by Salary desc
limit 1 offset N),null)
as getNthHighestSalary //可有可无
);
END
limit
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N=N-1;
RETURN (
select distinct Salary
from Employee
order by Salary desc
limit N,1
);
END
本文地址:https://blog.csdn.net/weixin_45880764/article/details/110678559