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 查询的表达能力和执行效率。
热门推荐
抗生素、消炎药,到底有什么区别?
蓝莓种植技术全攻略:从品种选择到浇水管理的十大关键要点
如何分析股票的一分钟线?这种分析方法有哪些局限性?
可得利益和期待利益的区别是什么?
提升学习效率的实用技巧:七种高效学习方法
女孩子的房间为什么叫闺房:传统文化的印记
公司合同专用章号:法律效力与风险管理实务
股票高抛低吸蕴含着怎样的投资策略?这种策略有哪些风险和机遇?
深度观察|中国打印机的崛起之路
土地使用权如何转让
滤光片的作用和原理
消炎就用阿莫西林,你知道这么做的后果吗?
早上好!送你一份超浪漫的赏花图鉴
深部臀肌综合征:一个比“梨状肌综合征”更准确的诊断
司法机关是什么?职能、重要性及如何利用司法资源
苏轼《行香子·茶词》赏析:密云龙茶与杭州知州的雅集
三禁六计四避险……电动自行车安全使用指南来了!请查收
古代剑的知识培训课件
挽救生命的“黄金4分钟”
手冲咖啡与意式咖啡有何不同?意式咖啡豆也可以手冲吗?
免疫力下降致面瘫,中医治疗、康复、预防有妙招
动态心电图佩戴后要注意什么
家居养鱼指南:如何打造完美氛围感鱼缸
在科研压力下维护科学价值
如何将《金刚经四句偈》的智慧,融入日常生活中?
小米洗衣机故障码详解:从E1到E9的复位方法
防偷窃警示:法律视角下的防范与责任担当
2025 必看!6 斤被子对应温度,舒适睡眠密码!
如何理解开源协议中的不可逆授权条款
夏季食用凉拌菜全攻略:好处、坏处及饮食禁忌