窗函数介绍
1、窗函数
1.1 dense_rank() over 函数可以获取排名并且没有间隙(1 2 2 3)
select
score, dense_rank() over (order by score desc) as 'Rank'
from
Scores
1.2 rank() over 函数可以获取排名但是有间隙( 1 1 3 3 5)
2、前后函数
3.1 LAG(expr, n)
- 返回当前行的前n行(本组内)的expr值
LAG(expr, n) 返回当前行的前n行(本组)的expr值,lag允许你在每一个分组内, 从当前行向前看n行数据,n(也叫offset)是从当前行偏移的行数,以获取值。offset必须是一个非负整数。如果offset为零,则LAG()函数计算当前行的值。如果省略 offset,则LAG()函数默认使用n=1, 向前看一个数据。
3.2 lead(expr, n)` - 返回当前行的后n行(本组内)的expr值
具体用法与 lag 相似,下面的示例来自180. 连续出现的数字 - 力扣(LeetCode)
select distinct num as ConsecutiveNums
from (
select *, lag(num, 1) over (order by id) as lag_num,
lead(num, 1) over (order by id) as lead_num
from logs) l
where l.lag_num = l.num and l.lead_num = l.num
3、关于子查询
子查询查不到就会返回 null,二 limit 查不到就会什么也不返回,所以嵌套子查询可以满足某些要求返回 null
sql执行顺序 from -> where -> group by -> select -> order by -> limit