开窗函数over(),rank()的用法及例子

介绍

窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。

开窗函数over的常用方法

over() 的语法为:over([patition by ] <order by >)。

需要注意的是,over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。

over() 的另一常用情景是与 row_number() 一起用于分页。

先创建一个表(目前条件有限,日后再补,用表格先凑合一下。。。)

1.为每条数据显示聚合信息.(聚合函数() over()

select *, max(num) over () as  '杀敌最大数' from table_name

结果:

select *, sum(num) over () as  '杀敌总数' from table_name

2.位每条数据提供分组的聚合函数结果(聚合函数() over(partition by 字段) as 别名)

select *, sum(num) over(partition by name ) as'个人杀敌总数' from table_name

将数据先进行分组再计算

select *, max(num) over(partition by name ) as'个人杀敌总数' from table_name order by name


例如最小数、最大数计算同理

3.与排名函数一起使用(row number() over(order by 字段) as 别名)---固定搭配

select *, row_number() over(partition by name  order by name) as '分组排序' from table_name

先按姓名排序:

按分组后排序

select *, row_number() over(order by name) as '分组排序' from table_name

rank()函数同理

rank()over(partition by user_id order by user_date)

上面不区分主键,只是按排序顺序进行数字递增,这个用的多

-----------------------------------------------------------------------------------

注意点1:row_number()函数是在distinct子句之前处理的

有需要的后续补充吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值