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 查询的表达能力和执行效率。
热门推荐
心动过速的症状和身体反应有哪些
萨摩耶犬:笑脸天使,雪地中的小太阳
任城区古槐街道:以优秀传统文化赋能街道发展新活力
合同到期续签更改条款协商指南
“智能地图+大数据+云计算”科技助力冷链物流快速发展
树形结构:一篇文章梳理
老人面瘫主要原因有哪些
nps代理搭建内网穿透服务,访问内网web网站和远程运维
详解美国TIN:美国纳税人识别号全面解析
麦芽糊精是什么?从定义到健康影响的全面解析
疫苗案件法律分析:从研发到接种的全流程法律问题研究
梦到小猫是什么征兆?多维度解读这个神秘梦境
铅球比赛规则 铅球比赛中哪些情况属于犯规
成都第二条轨道环线来了!8座新站即将开通
百合的生长环境条件及特点(探究百合生长的关键因素和特征)
我国利率影响因素与长期变动趋势探讨
如何理解和运用股票的bbi指标?这个指标在实际操作中有哪些局限性?
电梯里的新鲜空气:揭秘现代电梯的通风奥秘
如何利用AI优化你的PPT内容和布局
草坪露营、垂钓民宿……开启乡村“微度假”瓦窑村火爆出圈
代理IP在使用之前需不需要验证是否有效
新研究进一步揭示地球生命或起源于“热泉”
急性胆囊炎平时要注意什么
俗话讲 “人间至味是清欢”,什么是“至味”?什么是“清欢”?
我国首口超5000米深层地热探井完工,深层地热开发取得重大突破
青岛高新区加快打造绿色低碳先行示范区
普洱熟茶过夜饮用指南:安全、健康与注意事项全解析
云南五天四晚旅游攻略:行程安排、住宿建议与费用预算
如何为PPT找合适的配图
绩效薪资怎么提升员工积极性