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

 

 

posted @ 2024-02-29 23:50  张福祥  阅读(46)  评论(0)    收藏  举报