sql中一些小众的函数
lag()函数:
查询当前行向上偏移n行对应的结果
该函数有三个参数:第一个为待查询的参数列名,第二个为向上偏移的位数,第三个参数为超出最上面边界的默认值。
lead()函数:与上面相反
例题:查询连续出现的三次的数字
select
distinct num as ConsecutiveNums
from
(
select
id,num,
# 从当前记录获取前一行记录的num值,如果没有前一行,则返回null
lag(num,1,null) over (order by id) as lag_num,
# 从当前记录获取后一行记录的num值,如果没有后一行,则返回null
lead(num,1,null) over (order by id) as lead_num
from logs
) as l
# 当前值等于前一行的值,以及等于后一行的值,即满足了至少出现三次
where l.num = l.lag_num and l.num = l.lead_num
ROUND 函数将数字四舍五入到指定的位数。 例如,如果单元格 A1 包含 23.7825,而且您想要将此数值舍入到两个小数位数,可以使用以下公式:
=ROUND(A1, 2)
此函数的结果为 23.78。
窗口函数中over是干什么的
OVER的定义
OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
OVER的语法
PARTITION BY 子句进行分组;
ORDER BY 子句进行排序。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。
开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。
group_concat([DISTINCT] <连接字段> [Order BY ASC/DESC 排序字段] [Separator <分隔字符>])

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号不连续。

rank dense_rank

![]()
浙公网安备 33010602011771号