4分钟了解什么是SQL窗口函数
你也许很熟悉SQL的简单查询,比如使用SELECT FROM WHERE GROUP BY这样的基础语句,但是如果你想进一步提升自己的SQL技能,你不能不知道窗口函数(Window Function),又被叫做分析函数(Analytics Function)。
- 作者:MarTechCareer来源:MarTechCareer|2021-01-07 16:50
你也许很熟悉SQL的简单查询,比如使用SELECT FROM WHERE GROUP BY这样的基础语句,但是如果你想进一步提升自己的SQL技能,你不能不知道窗口函数(Window Function),又被叫做分析函数(Analytics Function)。
什么是窗口函数/分析函数?
窗口函数是类似于可以返回聚合值的函数,例如SUM(),COUNT(),MAX()。
但是窗口函数又与普通的聚合函数不同,它不会对结果进行分组,使得输出中的行数与输入中的行数相同。
窗口函数剖析
一个窗口函数大概看起来是这样:
- SELECT SUM() OVER(PARTITION BY ___ ORDER BY___) FROM Table
这里有3点需要牢记:
1. 聚合功能:在上述例子中,我们用了SUM(),但是你也可以用COUNT(), AVG()之类的计算功能
2. PARTITION BY:你只需将它看成GROUP BY子句,但是在窗口函数中,你要写PARTITION BY
3. ORDER BY:ORDER BY和普通查询语句中的ORDER BY没什么不同。注意,输出的顺序要仔细考虑
示例:集合函数VS窗口函数
假设我们有如下这个表格:
如果要按性别获取平均GPA,可以使用聚合函数并运行以下查询:
- SELECT Gender, AVG(GPA) as avg_gpa
- FROM students
- GROUP BY Gender
结果如下:
下一步是关键!
现在我们想得到如下结果:
我们当然可以用我们刚刚提到的聚合函数,然后再将结果join到初始表,但这需要两个步骤。
但如果我们使用窗口函数,我们则可以一步到位,并得到相同的结果:
- SELECT *,
- AVG(GPA) OVER (PARTITION BY Gender) as avg_gpa
- FROM table
通过上面的查询,我们正在按性别对数据进行划分,并计算每种性别的平均GPA。然后,它将创建一个称为avg_gpa的新列,并为每行附加关联的平均GPA。
窗口函数的优点
简单
窗口函数更易于使用。在上面的示例中,与使用聚合函数然后合并结果相比,使用窗口函数仅需要多一行就可以获得所需要的结果。
快速
这一点与上一点相关,使用窗口函数比使用替代方法要快得多。当你处理成百上千个千兆字节的数据时,这非常有用。
多功能
性最重要的是,窗口函数具有多种功能,本文并没有提及这个功能,比如,包括添加移动平均线,添加行号和滞后数据,等等。
结语
读到这里,你大概对窗口函数有了初步认识。希望本文提及的例子对你理解窗口函数有帮助。总而言之,希望你的SQL可以越来越厉害!
【编辑推荐】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 高并发场景下,到底先更新缓存还是先更新数据库?使用MySQL命令行修改密码四种优秀的数据库设计工具记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL update 语句的正确用法查看oracle数据库版本的方法切记!MySQL中Order By与Limit不要一起用!SQL优化极简法则,还有谁不会?
- 使用MySQL命令行修改密码四种优秀的数据库设计工具记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL update 语句的正确用法切记!MySQL中Order By与Limit不要一起用!SQL优化极简法则,还有谁不会?查看oracle数据库版本的方法MySQL时间格式化
- 使用MySQL命令行修改密码四种优秀的数据库设计工具记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL update 语句的正确用法MySQL时间格式化三大流行数据库(MongoDB、PostgreSQL和Harper)大比拼查看oracle数据库版本的方法SQL语句中UPDATE的三种用法
订阅专栏+更多
-
数据湖与数据仓库的分析实践攻略
助力现代化数据管理:数据湖与数据仓库的分析实践攻略共3章 | 创世达人1人订阅学习
-
云原生架构实践
新技术引领移动互联网进入急速赛道共3章 | KaliArch30人订阅学习
-
数据中心和VPDN网络建设案例
漫画+案例共20章 | 捷哥CCIE209人订阅学习
视频课程+更多
-
HTML5CSS3JAVASCRIPT三合一教程实战
讲师:张晨光25389人学习过
-
大数据时代的数据中台
讲师:DataSir5598人学习过
-
《Excel企业实战系列》第8章-图表(买前务必
讲师:王子宁2599人学习过
专题推荐+更多
- 精选博文
- 论坛热帖
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微