本文主要是介绍开窗函数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子句之前处理的
有需要的后续补充吧
这篇关于开窗函数over(),rank()的用法及例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!