刷题然后复制一些东西进来做笔记,随时复习。
一、limit和offset用法
mysql里分页一般用limit来实现
select * from article LIMIT 1,3
select * from article LIMIT 3 OFFSET 1
上面两种写法都表示取2,3,4三条条数据
当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如
select* from article LIMIT 1,3 就是跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据
当 limit后面跟一个参数的时候,该参数表示要取的数据的数量
例如 select* from article LIMIT 3 表示直接取前三条数据,类似sqlserver里的top语法。
当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。
例如select * from article LIMIT 3 OFFSET 1 表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据
mysql limit和offset用法 - dongminglong - 博客园 (cnblogs.com)
二、IFNULL
MySQL IFNULL
函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL
,则返回第一个参数。 否则,IFNULL
函数返回第二个参数。
两个参数可以是文字值或表达式。
以下说明了IFNULL
函数的语法:
IFNULL(expression_1,expression_2);
如果expression_1
不为NULL
,则IFNULL
函数返回expression_1
; 否则返回expression_2
的结果。
IFNULL
函数根据使用的上下文返回字符串或数字。
如果要返回基于TRUE
或FALSE
条件的值,而不是NULL
,则应使用IF函数。
请参见以下IFNULL
函数示例:
示例-1
SELECT IFNULL(1,0); -- returns 1
示例-2
SELECT IFNULL('',1); -- returns ''
示例-3
SELECT IFNULL(NULL,'IFNULL function'); -- returns IFNULL function
上面示例中的语句是怎么运行的?
IFNULL(1,0)
返回1
,因为1
不为NULL
。IFNULL('',1)
返回''
,因为''
字符串不为NULL
。IFNULL(NULL,'IFNULL function')
返回IFNULL
函数字符串,因为第一个参数为NULL
。
请注意,应避免在WHERE子句中使用IFNULL
函数,因为它会降低查询的性能。
如果要检查值是否为NULL
,则可以在WHERE
子句中使用IS NULL
或IS NOT NULL
。
sql:函数:ifnull()_花和尚也有春天的博客-CSDN博客_sql ifnull函数
三、declare & SET
必须单独定义变量 ,不能在函数中改变输入参数
declare m INT;
set m = N-1; # 必须单独定义变量, 不能直接下文sql中用N-1
窗口函数
窗口函数是整个SQL语句最后被执行的部分,这意味着窗口函数是在SQL查询的结果集上进行的,因此不会受到Group By, Having,Where子句的影响
函数() Over (PARTITION By 列1,列2,Order By 列3,窗口子句) AS 列别名
来源:最全的SQL窗口函数介绍及使用 - 知乎 (zhihu.com)
解题思路
各位可以参考https://blog.csdn.net/qq_41057885/article/details/109176014
1. rank() over
作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7
2. dense_rank() over
作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6
3. row_number() over
作用:查出指定条件后的进行排名,条件相同排名也不相同,排名间断不连续。
说明:这个函数不需要考虑是否并列,即使根据条件查询出来的数值相同也会进行连续排序。即:1 2 3 4 5 6
使用小提示
dense_rank() over 后面跟排序的依据的列,下面是用了一个排序好的列(order by score desc)。
注意:如果select中有一列是用rank()这类函数,其他的列都会按着他这列规定好的顺序排。
https://leetcode.cn/problems/rank-scores/solution/by-friendly-chandrasekharhye-d70u/
SQL Server中的窗口函数