MySQL 窗口函数详解:分析性查询的强大工具
创作时间:
作者:
@小白创作中心
MySQL 窗口函数详解:分析性查询的强大工具
引用
1
来源
1.
https://mp.apipost.cn/a/a5252c059ff354c8
MySQL窗口函数是数据分析中的一项强大工具,它允许用户在不进行数据分组的情况下执行复杂的分析操作。从版本8.0开始,MySQL引入了窗口函数功能,使得开发者能够更灵活地处理数据,实现诸如排名计算、累计求和和移动平均等高级分析需求。本文将详细介绍窗口函数的基本语法、常见函数类型、窗口框架以及实际应用场景。
窗口函数的基本语法
窗口函数的基本语法结构如下:
function_name([arguments]) OVER (
[PARTITION BY columns]
[ORDER BY columns]
[frame_clause]
)
- function_name: 窗口函数名,如
ROW_NUMBER()、RANK()、DENSE_RANK()、SUM()、AVG()等。 - PARTITION BY: 可选,用于定义窗口的分区,类似于
GROUP BY。 - ORDER BY: 用于定义窗口内的行顺序。
- frame_clause: 可选,定义窗口框架,可以是
ROWS或RANGE。
常见窗口函数
- ROW_NUMBER()
为每个分区的每一行分配唯一的行号。
SELECT name, department,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num
FROM employees;
- RANK()
为每个分区的每一行分配排名,排名有重复,且后面排名会有跳跃。
SELECT name, department,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees;
- DENSE_RANK()
类似于 RANK(),但排名不跳跃。
SELECT name, department,
DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_rank
FROM employees;
- NTILE(n)
将分区中的行均匀分布到 n 个桶中,并为每一行分配桶号。
SELECT name, department,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees;
- SUM(), AVG(), MIN(), MAX()
在窗口内计算聚合值。
SELECT name, department, salary,
SUM(salary) OVER (PARTITION BY department) AS total_salary
FROM employees;
窗口框架
窗口框架用来定义在计算聚合值时哪些行应该被包含在窗口内。框架可以用 ROWS 或 RANGE 来定义。
- ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: 从分区开始到当前行。
- ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING: 从前一行到后一行。
示例:
SELECT name, salary,
SUM(salary) OVER (ORDER BY salary ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS moving_sum
FROM employees;
应用场景
窗口函数在以下场景中非常有用:
- 计算每个部门内员工的工资排名。
- 求某段时间内的累计销售额。
- 计算移动平均值或累计和。
- 分析和报告需要复杂数据操作的情况。
通过使用窗口函数,开发者可以在查询中轻松实现复杂的分析和报告功能,而不需要进行额外的数据处理。窗口函数提供了一种简洁、优雅的解决方案,可以提高 SQL 查询的表达能力和执行效率。
热门推荐
西班牙商务签证申请指南:条件、流程及面试要点
AI三大热点齐爆、顶级游资全出动抢筹, 都选中了谁?
马桶预留宽度多少坐着合适
DMS深层肌肉刺激仪和筋膜枪的区别
2025年广东高职单招考试时间表_具体什么时间开考
汽车电路如何优化以提升性能?这种优化对驾驶体验有何影响?
农村别墅装修设计指南 打造理想乡村生活
手机脖、电脑肩?“圆肩驼背人”的自救指南!
深度学习中的特征融合方式:Concat与Add的对比分析
数据预处理方法详解:特征选择、特征缩放与特征构造
小猫咪怀孕会有什么可见的表征?
宠物店创业项目:市场调查与运营策略
Cell子刊最新研究:阿斯巴甜与心血管疾病正相关,揭示其传导机制
低蛋白饮食:原理、适用人群及注意事项
带雾的网名(共130个)
百亿杉杉重整背后:继母挑大梁,儿子暂居日本,杉杉股份总经理被边控?
女生说无聊时,如何开启话题?
提升原神战力指南:40级以下如何轻松击败强敌
节奏与步伐:体育舞蹈音乐类型的受欢迎程度分析
改善肠道健康的7种有效方法(掌握这些方法)
养鱼用的六合一过滤器,有哪6种功能?看完就明白了,很实用!
百年道外的文化自觉
车内除湿全攻略:实用方法与注意事项
什么是平台思维
华中科技大学江涛科研团队:5G标准中PCC极化码技术及演进
家用车雨刮器选购指南
舌尖上的味蕾盛宴,土豆炖排骨的味道点评
这样做沙拉最好吃:从食材到酱汁的完美搭配指南
了解中耳炎(中耳感染):病因、症状和治疗方法
健身后该如何摄入蛋白质和碳水