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 查询的表达能力和执行效率。
热门推荐
干细胞治疗2型糖尿病研究新进展与临床应用前景
昭字一般人压不住:中华文化中的命名艺术与五行智慧
大明朝刚刚建立,为什么朱元璋就着急编修《元史》
中国低空经济100家企业梳理(收藏版)
清朝举人仕途探索:大挑制度的实施与影响
风云再起:人工智能大模型能否颠覆气象预报的未来?
视力检查方法步骤
创业中的跨文化交际与管理
智慧工地一张图 打通施工现场管理的“最后一公里”
医生教你如何选购钙片:从成分到形态的全面指南
巴菲特的传奇:年化收益率与卓越投资哲学
在线“踩雷”消费如何维权?
中国最逆天的8条天路,不是十年老司机都不敢开,此生自驾必去
四海云游承德旅游都有哪些好玩的景点,新手打卡攻略!
南太平洋岛国瓦努阿图吸引移民投资者的原因究竟是什么?
车辆过期没有年检怎么处理?如何提前查询车辆年检
四神云气图:汉代墓室壁画中的艺术瑰宝
健身新潮流:游戏化健身,让运动更有趣
秋季养生汤推荐:五款清淡汤品,增强体质滋润身心!
普洱茶与草本植物的完美搭配:功效与饮用指南
斯坦福大学教务长:培养孩子“抗挫力”的6个建议
电梯超载:现象、影响与安全措施
剪辑师的就业方向与职业规划
淋巴按摩能排毒?一个简单手法教你发现它生病的信号
手机系统升级指南:提升体验与保障安全的必备知识和注意事项
UEFI是什么意思?深入解读现代电脑启动界面的秘密
莱州旅游攻略:黄金海岸、古城、三山岛等景点全攻略
计算机技术的发展与未来趋势
探索澳门美食:美食爱好者的最佳餐厅指南
68岁比尔盖茨:希望再工作30年,像巴菲特那样每周办公室工作6天