MySQL 技巧:用好窗口函数,告别复杂子查询

简介: MySQL 技巧:用好窗口函数,告别复杂子查询

MySQL 技巧:用好窗口函数,告别复杂子查询

在日常开发中,我们经常遇到“分组排名”“累计求和”或“环比计算”等需求。以往靠子查询或临时变量实现,代码又长又难维护。MySQL 8.0 引入的窗口函数让这些操作变得优雅高效。

1. 分组排名:ROW_NUMBER()

假设要统计每位学生的成绩排名(按班级分组):

SELECT name, class, score,
       ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) AS rank
FROM students;

PARTITION BY 指定分组,ORDER BY 决定排序规则。想允许并列名次?改用 RANK()DENSE_RANK() 即可。

2. 累计求和:SUM() OVER()

计算每个月的销售额累计值:

SELECT month, amount,
       SUM(amount) OVER (ORDER BY month) AS cumulative
FROM sales;

默认从第一行累加到当前行,无需自连接。

3. 环比增长率:LAG() 获取上一行

SELECT month, amount,
       (amount - LAG(amount, 1) OVER (ORDER BY month)) / LAG(amount, 1) OVER (ORDER BY month) * 100 AS growth_rate
FROM revenue;

LAG(列, 偏移量) 取前几行数据,LEAD() 取后几行,轻松计算差值或比率。

小贴士

  • 窗口函数不会合并行,保留原始明细
  • 性能优于等价的子查询或临时表方案
  • 需要 MySQL 8.0+,低版本可升级或改用模拟写法

用好窗口函数,让 SQL 更短、更清晰、更高效。

相关文章
|
5月前
|
关系型数据库 MySQL Serverless
MySQL 技巧:巧用窗口函数计算累计值
MySQL 技巧:巧用窗口函数计算累计值
|
5月前
|
SQL 移动开发 关系型数据库
MySQL技巧:利用窗口函数高效去重,告别嵌套子查询
MySQL技巧:利用窗口函数高效去重,告别嵌套子查询
|
5月前
|
SQL 关系型数据库 MySQL
5个提升MySQL查询效率的实用技巧
5个提升MySQL查询效率的实用技巧
|
前端开发 安全 JavaScript
为你的React项目接入高德地图
为你的React项目接入高德地图
1552 0
|
5月前
|
关系型数据库 MySQL 索引
5个让MySQL查询飞起来的实用技巧
5个让MySQL查询飞起来的实用技巧
|
5月前
|
人工智能 安全 API
OpenClaw(小龙虾)阿里云/本地部署超详细步骤+千问/Coding Plan对接、15个必装技能与常见问题全解
OpenClaw(社区常称“小龙虾”,Clawdbot)是2026年主流的开源轻量化AI智能体,核心优势在于可通过Skill技能模块自由扩展能力,像乐高积木一样组合出适配办公、学习、开发、自动化的专属AI助手。在ClawHub上万种技能中,有15个被社区公认为“装机必备”,覆盖自我进化、联网搜索、内容处理、办公协同、安全防护、语音转写等全场景。
2280 0
OpenClaw(小龙虾)阿里云/本地部署超详细步骤+千问/Coding Plan对接、15个必装技能与常见问题全解
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
1209 0
|
Java
【Java异常】Error:(30, 62) java: 程序包com.sun.org.apache.xerces.internal.impl.dv.util不存在
【Java异常】Error:(30, 62) java: 程序包com.sun.org.apache.xerces.internal.impl.dv.util不存在
2096 0
|
安全 算法 网络安全
HTTP和HTTPS的区别
本文介绍HTTP与HTTPS的区别、HTTPS链接建立过程及常见加密算法。HTTP为明文传输,易被窃听;HTTPS通过SSL/TLS协议加密,确保数据安全。HTTPS使用端口443,提供认证机制。文中还详细讲解了对称加密(如AES、DES)和非对称加密(如RSA、ECC)算法的特点及应用场景。