MySql函数

总结:

常用函数:

GROUP_CONCAT:

用于将分组内的多个字符串值连接成一个字符串的聚合函数,常用于报表生成、数据汇总等场景

一、窗口函数

1.1 语法结构

window_function (expr) over (
    partition by ...
    order by ...
    frame_clause
)

其中,window_function是窗口函数的名称,expr是参数,有些函数不需要参数;

over子句包含三个选项:

分区 partition by

         partition by 选项用于将数据行拆分多个分区(组),它的作用类似group by,如果省略了 partition by,则所有的数据作为一个组进行计算

排序 order by

        该选项用于指定分区内的排序方式

窗口大小 frame_clause

        frame_clause选项用于在当前分区内指定一个计算窗口,也就是一个与当前行相关的数据子集

二、序号函数

序号函数有三个:row_number()、rank()、dense_rank(),可以用来实现分组排序,并添加序号

区别:

row_number():从1开始排序,哪怕是相同数据也会正常排序

rank():如果两个数据相同,那么第三个数据的序号直接为3

dense_rank():如果两个数据相同,那么第三个数据的需要还是为2

2.1 语法结构

row_number() | rank() | dense_rank() over(
    partiton by ...
    order by ...
)

2.2 示例

三、开窗聚合函数

在窗口中每条记录动态的应用聚合函数(sum、avg、max、min、count),可以动态计算在指定的窗口内各种聚合数值

四、分布函数cume_dist和percent_rank

cume_dist:

用途:分组内小于、等于当前rank值的行数/分组内总行数

应用场景:查询小于等于当前薪资的比例

percent_rank:

用途:每行按照公式(rank-1)/(rows-1)进行计算,其中,rank为rank()函数产生的序号,rows为当前窗口的记录总行数

应用场景:不常用

五、前后函数lag和lead

用途:返回位于当前行的前n行(lag(expr, n))或后n行(lead(expr, n))的expr的值

应用场景:查询前1名同学的成绩和当前同学成绩的差值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值