开窗函数学习整理

本文详细介绍了SQL中的开窗函数,包括其定义、与普通函数的区别、调用格式和执行顺序。讨论了开窗函数的两大类:聚合和排序函数,并举例说明了row_number() over()、sum() over()以及rank()、dense_rank()和ntile()等排序函数的应用和区别。
摘要由CSDN通过智能技术生成

一、开窗函数是什么

1、定义:

普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值,而开窗函数则可为窗口中的每行都返回一个值。简单理解,就是对查询的结果多出一列,这一列可以是聚合值,也可以是排序值。在ISO SQL规定了这样的函数为开窗函数,在 Oracle中则被称为分析函数,而在DB2中则被称为OLAP函数。

(聚合函数是对一组值执行计算并返回单一的值的函数。)

2、与普通函数区别:

a、SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。
b、聚合函数每组只返回一个值,开窗函数每组可返回多个值。
注:常见主流数据库目前都支持开窗函数,但mysql数据库目前还不支持。

3、调用格式:

函数名(列名) OVER(partition by 列名 order by列名)
OVER关键字表示把函数当成开窗函数而不是聚合函数。对于查询结果的每一行都返回所有符合条件的行的条数。OVER关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围。如果OVER关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算。

unbounded:无界限
preceding:从分区第一行头开始,则为 unbounded。 N为:相对当前行向前的偏移量
following :与preceding相反,到该分区结束,则为 unbounded。N为:相对当前行向后的偏移量
current row:顾名思义,当前行,偏移量为0
​
例子:
partition by order by asc/desc rows/range between unbounded preceding and current row
partition by order by asc/desc rows/range between 1 preceding and 1 following

4、执行顺序:

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行

二、开窗函数分类

有两类:一类是聚合开窗函数,一类是排序开窗函数。

1、聚合函数:

count() over(partition by ... order by ..
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值