4分钟了解什么是SQL窗口函数

数据库 SQL Server
你也许很熟悉SQL的简单查询,比如使用SELECT FROM WHERE GROUP BY这样的基础语句,但是如果你想进一步提升自己的SQL技能,你不能不知道窗口函数(Window Function),又被叫做分析函数(Analytics Function)。

 你也许很熟悉SQL的简单查询,比如使用SELECT FROM WHERE GROUP BY这样的基础语句,但是如果你想进一步提升自己的SQL技能,你不能不知道窗口函数(Window Function),又被叫做分析函数(Analytics Function)。

什么是窗口函数/分析函数?

窗口函数是类似于可以返回聚合值的函数,例如SUM(),COUNT(),MAX()。

但是窗口函数又与普通的聚合函数不同,它不会对结果进行分组,使得输出中的行数与输入中的行数相同。

[[374457]]

 

窗口函数剖析

一个窗口函数大概看起来是这样:

 

  1. 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没什么不同。注意,输出的顺序要仔细考虑

 

 

[[374458]]

 

示例:集合函数VS窗口函数

假设我们有如下这个表格:

 

如果要按性别获取平均GPA,可以使用聚合函数并运行以下查询:

 

 

  1. SELECT Gender, AVG(GPA) as avg_gpa 
  2. FROM students 
  3. GROUP BY Gender 

结果如下:

 

下一步是关键!

现在我们想得到如下结果:

 

我们当然可以用我们刚刚提到的聚合函数,然后再将结果join到初始表,但这需要两个步骤。

但如果我们使用窗口函数,我们则可以一步到位,并得到相同的结果:

 

  1. SELECT *, 
  2.   AVG(GPA) OVER (PARTITION BY Gender) as avg_gpa 
  3. FROM table 

通过上面的查询,我们正在按性别对数据进行划分,并计算每种性别的平均GPA。然后,它将创建一个称为avg_gpa的新列,并为每行附加关联的平均GPA。

窗口函数的优点

 

 

 

简单

窗口函数更易于使用。在上面的示例中,与使用聚合函数然后合并结果相比,使用窗口函数仅需要多一行就可以获得所需要的结果。

快速

这一点与上一点相关,使用窗口函数比使用替代方法要快得多。当你处理成百上千个千兆字节的数据时,这非常有用。

多功能

性最重要的是,窗口函数具有多种功能,本文并没有提及这个功能,比如,包括添加移动平均线,添加行号和滞后数据,等等。

结语

读到这里,你大概对窗口函数有了初步认识。希望本文提及的例子对你理解窗口函数有帮助。总而言之,希望你的SQL可以越来越厉害!

责任编辑:华轩 来源: MarTechCareer
相关推荐

2021-01-06 10:33:15

SQL数据库函数

2009-11-02 18:07:58

Oracle数据库

2021-05-17 20:13:50

数仓操作型数据库

2020-07-07 07:57:45

数据仓库

2022-02-22 13:20:57

RSA算法加密

2020-10-13 18:22:58

DevOps工具开发

2021-04-30 16:23:58

WebRTC实时音频

2022-12-16 09:55:50

网络架构OSI

2023-09-07 23:52:50

Flink代码

2009-11-05 14:53:54

Visual Stud

2018-05-06 16:26:03

关联规则数据分析关联规则推荐

2018-03-12 21:31:24

区块链

2021-10-19 07:27:08

HTTP代理网络

2009-11-09 12:55:43

WCF事务

2021-08-06 08:50:45

加密货币比特币区块链

2020-06-29 07:42:20

边缘计算云计算技术

2018-03-23 11:56:09

相似性推荐推荐算法推荐

2017-07-06 08:12:02

索引查询SQL

2022-07-18 06:16:07

单点登录系统

2018-03-12 14:37:50

区块链比特币架构
点赞
收藏

51CTO技术栈公众号