【中等】【176. 第二高的薪水】limit,offset与ifnull函数

【中等】【176. 第二高的薪水】MySql的分页查询!

(一)MySql必会

(1)limit和offset函数

在MySQL中,LIMIT和OFFSET是常用的用于分页查询的关键字。
LIMIT用于控制返回结果的行数,
而OFFSET则用于指定结果集的偏移量,即从哪一行开始返回结果。
通常结合使用它们来实现分页查询,可以按照以下的语法格式进行查询:

SELECT column_name(s)
FROM table_name
LIMIT row_count OFFSET offset;

其中,row_count表示要返回的行数,offset表示要跳过的行数。
例如,我们要查询从第 11 行开始的 5 条记录,可以使用以下查询:

SELECT *
FROM customers
LIMIT 5 OFFSET 10;

这将从表中跳过前 10 行记录,然后返回接下来的 5 行记录,即第 11 行到第 15 行。

需要注意的是,OFFSET的值是基于0的索引,即第一行为0。如果我们想要查询前 N 条记录,可以将 OFFSET 设置为 0,LIMIT 设置为 N。

请注意,在大型数据集上使用 OFFSET 和 LIMIT 可能会导致性能问题, 因为 MySQL 必须扫描并跳过指定的行数才能返回结果。在这种情况下,可以考虑使用其他方法来优化查询,如使用游标或分页库

(2) distinct关键字

在MySQL中,DISTINCT是一种关键字,用于查询时过滤掉重复的行数据,只返回不重复的结果。

使用DISTINCT关键字可以从指定的列中去除重复值,只返回唯一的值。下面是一个使用DISTINCT的简单示例:

SELECT DISTINCT column_name
FROM table_name;

其中,column_name是要进行过滤的列名,table_name是要查询的表名。

例如,如果有一个名为customers的表,其中有一个列名为country,我们想获取所有不重复的国家名称,可以使用以下查询:

SELECT DISTINCT country
FROM customers;

这将返回一个包含所有不重复国家名称的结果集。

请注意,DISTINCT关键字作用于所有选择的列。如果要使用多个列进行去重,可以在SELECT子句中指定多个列名。例如:

SELECT DISTINCT column1, column2
FROM table_name;

这将返回根据column1和column2两列进行去重的结果集。

值得注意的是,DISTINCT并不是一个函数,而是一个关键字,因此不需要将列名放在括号中。

在MySQL中,IFNULL是一个函数,用于处理空值(null)。它接受两个参数:要检查的值和替代值。

(3)ifnull函数

IFNULL函数的作用是,如果第一个参数不为空,则返回第一个参数的值;如果第一个参数为空,则返回第二个参数作为替代值。

以下是IFNULL函数的语法:

IFNULL(expression, alt_value)

其中,expression是要检查的值,alt_value是在expression为空时要返回的替代值。

例如,假设有一个名为students的表,其中有一个列名为age,我们想要查询学生的年龄,如果年龄为空,则显示为"未知"。可以使用以下查询:

SELECT IFNULL(age, '未知') AS age
FROM students;

这将返回一个名为age的结果集,如果年龄不为空,则显示实际年龄值;如果年龄为空,则显示为"未知"。

IFNULL函数可以在查询中的任何地方使用,不仅限于SELECT语句。它还可以在INSERT、UPDATE等语句中使用,用于处理空值情况。

(二)题目描述

查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。

Create table If Not 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')

(三)题解

select
       ifnull(
           (select distinct salary
               from Employee
               order by salary desc
               limit 1 offset 1),null)
           as SecondHighestSalary ;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值