MySQL窗口函数汇总

news/2024/9/27 10:46:26

1.窗口函数概述
窗口函数是一种SQL函数,非常适合于数据分析,其最大的特点就是:输入值是从SELECT语句的结果集中的一行或者多行的"窗口"中获取的,也可以理解为窗口有大有小(行数有多有少)。
通过OVER子句,窗口函数与其他的SQL函数有所区别,如果函数具有OVER子句,则它是窗口函数。如果它缺少了OVER子句,则他就是个普通的聚合函数。
窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过GROUP BY子句组合的常规聚合会隐去正在聚合的各个行,最终输出称为一行。但是窗口函数聚合完之后还可以访问当前行的其他数据,并且可以将这些行的某些属性添加到结果当中去。
下面可以通过两个图来区分普通的聚合函数和窗口函数

首先让我们先添加测试数据,并查看表。

CREATE DATABASE IF NOT EXISTS EmployeeDB;
USE EmployeeDB;
CREATE TABLE Employees (EmployeeID INT AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(100),DepartmentID INT,Salary DECIMAL(10, 2)
);INSERT INTO Employees (Name, DepartmentID, Salary) VALUES
('Alice', 1, 50000),
('Bob', 1, 55000),
('Charlie', 2, 60000),
('David', 1, 50000),
('Eve', 2, 65000),
('Frank', 3, 45000),
('Grace', 3, 47000),
('Hannah', 3, 48000),
('Ian', 2, 70000),
('Jack', 1, 52000);

select DepartmentID, sum(salary) as total
from employees
group by DepartmentID;

我们可以看的出来,常规聚合函数把id进行分组然后把每组的薪资综合计算出来放在最后面。

我们可以通过这两个例子看出来,聚合函数和窗口聚合函数的区别。就是窗口函数会进行分组,但不会把行进行合并。对于每一组窗口函数返回出来的结果都会重复的放在最后面。

2.窗口函数的语法
Function(arg1,..., argn) OVER ([PARTITION BY <...>] [ORDER BY <....>] [<window_expression>])
对于以上的窗口函数的语法[ ]中的语法是可以根据自己的需求进行选择(非必须写入语法),并且此语法严格按照上面的顺序来规定。
Function(arg1,..., argn)是表示函数的分类,可以是下面分类中的任何一组。
----------聚合函数,例如sum,min,avg,count等函数(常用)
----------排序函数,例如rank row_number dense_rank()等函数(常用)
----------跨行函数,lag lead 函数
OVER [PARTITION BY <...>] 类似于group by 用于指定分组
--每个分组你可以把它叫做窗口
--不分组的情况可以写成partition by null 或者直接不写partition by,所有列为一个大组
--分组的情况下,partition by 后面可以跟多个列,例如partition by cid,cname
[ORDER BY <....>] 用于指定每个分组内的数据排序规则 支持ASC、DESC
[<window_expression>] 用于指定每个窗口中 操作的数据范围 默认是窗口中所有行
1.窗口函数语法解释-Function(arg1,..., argn)
通常和partition by分组使用。当然也可以不分组使用,但也不分组使用通常没有意义。
----------聚合函数,例如sum,min,avg,count等函数(常用)
----------排序函数,例如rank row_number dense_rank()等函数(常用)
----------跨行函数,lag lead 函数
1.聚合函数
我们还通过上文的测试数据进行演示。我们就演示2个函数,其他的聚合类函数都是相同的用法。
sum函数:求和

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

深入工作流调度的内核

在大数据时代,工作流任务调度系统成为了数据处理和业务流程管理的核心组件,在大数据平台的构建和开发过程中尤为重要。随着数据量的激增和业务需求的多样化,合理的任务调度不仅能够提高资源利用率,还能保证业务流程的稳定和高效运行。本文将结合实际场景,探讨目前市面上常…

【TES817】l基于XCZU19EG FPGA的高性能实时信号处理平台

板卡概述 TES817是一款基于ZU19EG FPGA的高性能实时信号处理平台,该平台采用1片高性能的FPGA:XCZU19EG-2FFVC1760I作为主处理器,FPGA的PL端外挂1组72位DDR4 SDRAM,用来实现超大容量数据缓存,FPGA的PS端外挂1组72位的DDR4 SDRAM的高速数据缓存,用来支持操作系统的运行。 该…

PbootCms模板当列表页只有一页的时候不显示分页的小技巧

在 PBootCMS 中,如果希望在列表页只有一页时隐藏分页条,可以通过条件判断来实现。具体步骤如下: 步骤 1: 判断总页数获取总页数:使用 {page:count} 获取总页数。 判断总页数:当总页数大于 1 时显示分页条。详细解释判断总页数使用 {pboot:if([page:count] > 1)} 判断总…

PbootCMS中判断文章列表是否有缩略图并避免默认图片的显示

在PBootCMS中,为了在文章列表中展示缩略图,并避免在没有上传缩略图时显示默认图片,可以使用 isico 返回值来判断当前文章是否有缩略图。以下是一个详细的示例代码,展示了如何实现这一功能。 示例代码<ul class="note-ul">{pboot:list scode={sort:scode}}&…

PBOOTCMS模板安装后,网站首页打开版式错乱的解决方法。(为什么PBOOTCMS的模板首页错乱)

在PBootCMS模板安装后,如果发现首页打开时版式错乱,通常是由于样式表(CSS文件)没有正确加载导致的。以下是一个详细的解决方法,并将其绘制成表格形式。 解决方法检查站点信息确认后台站点信息中的域名是否正确填写。 域名必须包含 http:// 或 https://。具体步骤进入后台管…

【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题

问题现象 客户刚开始使用YashanDB odbc的时候,需要查看调用日志详情, 确认相应接口调用情况。 问题的风险及影响 客户在windows server 2016环境测试,影响测试业务的开展。 问题影响的版本 YashanDB版本:所有版本 问题发生原因 本案例是对操作的说明, 不涉及根因 解决方法…

黑马PM-内容项目-产品原型设计

产品设计思路原型的概念及分类原型绘制工具原型设计规范Axure制作基础交互

欧姆龙PLC数据 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关采集欧姆龙PLC数据 2 5 用PROFINET IO协议转发数据 5 6 案例总结 7 1 案例说明设置网关采集欧姆龙PLC数据 把采集的数据转成profinet IO协议转发给其他系统。2 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一…