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 查询的表达能力和执行效率。
热门推荐
冷冻治疗去痘疤恢复有哪些注意事项?
日产可变压缩比发动机:技术奇迹还是商业陷阱?
龙游初阳书院:一所注重通识教育的特色学校
骗婚女生怎么办事不犯法:法律应对策略与风险防范
如何判断对方是不是骗婚的
常见的国际空运北欧航线有哪些?
口腔后槽牙疼要警惕了
建设机械的应用领域有哪些?这些应用领域的市场需求如何?
中国家庭年收入30万以上户数统计:南京前五,长沙第10
《黑神话·悟空》惊艳翻译:如何用英文讲好中国神话故事?
群晖NAS设置篇---基础设置
葛金文一行应邀出访意大利和德国 推动中医药文化“出海”
高血压者应知应会:高压与低压相差40mmHg以上,身体出了啥问题?
蛋白質來源怎麼選?動物性和植物性有差嗎?完整比較看這裡
分不清内部审核和管理评审,别说你懂“质量体系评审”!
温泉水乐园设计的家庭友好元素:打造亲子共度的欢乐时光
青姓的起源与历史:青姓的文化、名人和分布
华为手机能否使用谷歌服务
IFS函数怎么用(语法、参数、案例、注意事项)
篱笆围栏用什么植物好
Excel实用技巧:二级下拉菜单与数据验证
玛瑙手串:璀璨之美,温润之韵
OpenWrt和DD-WRT有何区别
儿童出现这些症状,家长别紧张,可能湿疹作怪,记住4个治疗方法
川沙古镇景点介绍,上海川沙古镇一日游攻略
无锡徒步登山的地方有哪些
运算放大器:11种经典电路详解与应用
抽血后可以洗澡吗?这些注意事项要记牢
质量管理体系的职业路径是什么
糖尿病患者能吃蓝莓吗?专家解读:适量食用有益健康