前言:
💞💞大家好,我是书生♡,今天主要和大家分享一下可MySQL中的窗口函数的概念,语法以及常用的窗口函数,希望对大家有所帮助。感谢大家关注点赞。
💞💞前路漫漫,希望大家坚持下去,不忘初心,成为一名优秀的程序员
个人主页⭐: 书生♡
gitee主页🙋♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬
窗口函数(Window Functions)在数据库查询中扮演着非常重要的角色,它们允许用户对查询结果集中的数据进行分组、排序,并在每个分组内进行聚合、排名、计算等操作,而不改变原始查询结果的行数或顺序。以下是窗口函数的一些主要作用:
- 分组内聚合:窗口函数可以在每个分区(由PARTITION BY子句定义)内执行聚合操作,如计算每个部门的平均工资、每个班级的最高分等。与传统的聚合函数不同,窗口函数会为每一行返回一个结果,而不是将整个分组压缩成一个结果。
- 排名和排序:窗口函数如ROW_NUMBER(), RANK(), DENSE_RANK()等可以用来为结果集中的每一行分配一个唯一的序号或排名。这些排名可以是基于某个字段的值,或者是在某个分区内的相对位置。
滑动窗口计算:通过定义窗口的起始和结束范围(使用OVER子句中的ROWS BETWEEN子句),窗口函数可以执行滑动窗口计算,如计算连续几天的平均销售额、计算过去三个月的累计销售额等。 - 访问其他行:LAG()和LEAD()等窗口函数允许用户访问结果集中的前一行或后一行的数据。这对于计算与前一行或后一行的差异、比较或构建时间序列分析等非常有用。
- 获取边界值:FIRST_VALUE()和LAST_VALUE()等窗口函数可以返回每个分区中的第一行或最后一行的某个字段的值。
- 数据桶划分:NTILE()函数可以将结果集中的数据划分为指定数量的近似大小的数据桶,并为每行分配一个桶号。
- PARTITION BY 子句用于指定分组列,关键字:PARTITION BY 。
- ORDER BY 子句用于指定排序列,关键字ORDER BY 。
- ROWS BETWEEN 子句用于指定窗口的范围,关键字ROWS BETWEEN 即[开始行]、[结束行]
- 排序函数:row_number(),rank(),dense_rank()
- 聚合函数:max(),min(),count(),sum(),avg(),median()
- 向前向后取值:lag(),lead()
- 百分位:percent_rank()
- 取值函数:first_value(),last_value(),nth_value()
- 分箱函数:ntile()
这里我们重点简述排序函数、聚合函数、取值函数、向前向后取值。
- 聚合窗口函数结合了聚合函数和窗口函数的特性,用于在数据的特定窗口或分区上执行聚合计算。
- 它允许在保持数据完整性的同时,对数据的子集(即窗口)进行复杂的统计和分析。
5.1.1 分组聚合函数
5.1.2 分组排序聚合函数
取值窗口函数是用于在数据库查询中返回指定位置上的数据的函数。这类函数允许在结果集的每一行上执行计算,同时保留原始数据行的上下文信息。
5.2.1 向上取值
5.2.2 向下取值
5.2.3 分组取值
分组取值–分组只进行组内查找
5.2.4 取第一个值
只取组内第一个值
- 按照指定字段排序后生成序号
- 排序窗口函数允许用户根据指定的排序规则对窗口内的数据进行排序,以便更好地理解和分析数据。这些函数在数据处理和分析中非常有用,特别是在需要获取前几名、排名等场景时。
案例:
需要使用rows 进行指定 计算行数
范围的确认:
默认情况下没有指定partition by 的字段,范围是全表,如果指定了partition by ,范围是分组内的范围
可以通过rows指定计算行的范围大小,指定计算行范围后,只对范围内的数据进行计算
row between 起始行 and 结束行
范围顺序要注意,一般起始行写向上查找,结束行写向下查找,可以同上或者同下,但是范围不能超过
使用了order by 后会自带计算范围统计数据
CTE语法是一种常见的SQL语法,全称为“公共表表达式”(Common Table Expressions,CTE)。
CTE语法类似子查询,可以将一个select语句计算的结果当成一个新的临时表使用,CTE语法允许你在一个SQL语句中创建一个命名的临时结果集,这个临时结果集只在当前的SQL语句执行期间存在。CTE可以提高SQL语句的可读性和维护性,同时也可能提高查询效率。
案例:
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/65896.html