news 2026/5/1 8:23:06

sql窗口函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql窗口函数

mysql窗口函数:告别繁琐子查询

在处理排名统计、分组内对比、累计计算这类需求时,你是不是还在写多层子查询、反复关联表?mysql窗口函数就是为解决这类问题而生的高效工具——它能在不聚合数据的前提下,对指定数据集(窗口)内的行做计算,让代码更简洁、性能更优。

窗口函数的核心语法:

<函数名>([expr]) over(

[partition by <列名>]

[order by <列名> [asc|desc]]

[rows|range <窗口范围>]

)

- partition by:可选,按指定列分组,每组是一个独立窗口,不分组则整个结果集为一个窗口。

- order by:可选,定义窗口内数据的排序规则,决定排名、累计等计算的顺序。

- rows|range:可选,限定窗口内的行范围,比如“当前行的前2行到后1行”。

mysql窗口函数主要分三类,日常开发够用了:

1. 排名函数: rank() 、 dense_rank() 、 row_number()

三者的核心区别在于处理并列排名的方式:

- row_number() :不管是否并列,都生成连续序号(1,2,3,4)。

- rank() :并列会跳过后续序号(1,2,2,4)。

- dense_rank() :并列不跳过序号(1,2,2,3)。

举个例子,统计每个部门员工的薪资排名:

select

dept, name, salary,

row_number() over(partition by dept order by salary desc) as rn,

rank() over(partition by dept order by salary desc) as rk,

dense_rank() over(partition by dept order by salary desc) as dr

from emp;

2. 聚合窗口函数: sum() 、 avg() 、 max() 、 min()

和普通聚合函数的区别是,它不会将多行合并为一行,而是保留每行数据,同时计算窗口内的聚合结果。

比如计算每个员工的薪资,以及其所在部门的平均薪资:

select

dept, name, salary,

avg(salary) over(partition by dept) as dept_avg_sal

from emp;

3. 取值函数: lag() 、 lead() 、 first_value() 、 last_value()

用于获取窗口内指定位置的行数据,解决“和上一条/下一条数据对比”的需求。

- lag(expr, n) :获取当前行的前n行的expr值。

- lead(expr, n) :获取当前行的后n行的expr值。

比如查看每个员工的薪资,以及上一位员工的薪资:

select

name, salary,

lag(salary, 1) over(order by salary) as prev_sal

from emp;

最后说个关键:窗口函数和 group by 的区别。 group by 是聚合分组,每组只返回一行结果;窗口函数是开窗计算,会保留所有行,同时附加计算结果。

窗口函数: 用更少的代码、更高的效率,搞定那些之前需要绕弯子的统计需求

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:49:13

打破制造业“数据孤岛”:2026年ERP和MES系统集成如何驱动降本增效?

行业报告显示&#xff0c;超过六成的数据集成项目因技术架构不合理或工具选型失误而推倒重来。系统割裂与数据孤岛仍是核心痛点。2026年&#xff0c;制造业与零售电商在数字化转型中的核心痛点&#xff0c;依然是系统割裂与数据孤岛。行业调研揭示&#xff0c;超过80%的企业在系…

作者头像 李华
网站建设 2026/4/30 23:17:53

【数据分享】上市公司高管风险偏好数据+dofile(2007-2024年)

而今天要限时免费分享的数据就是上市公司高管风险偏好数据dofile&#xff08;2007-2024年&#xff09; 数据介绍 数据概况 数据名称&#xff1a;上市公司高管风险偏好数据dofile&#xff08;2007-2024年&#xff09; 数据年份&#xff1a;2007-2024 年 数据范围&#xff1a…

作者头像 李华
网站建设 2026/5/1 9:56:55

【数据分享】安徽省路网数据安徽省路网分类数据(2025年)

而今天要说明数据就是安徽省路网数据安徽省路网分类数据(2025年) 数据概况 数据含城市次干道、城市支路、城市主干道、高架及快速路、郊区乡村道路、内部道路、人行道路、自行车道等&#xff08;具体请看截图&#xff0c;有些省份可能无法分类出自行车道&#xff09;。 详情…

作者头像 李华
网站建设 2026/4/28 17:55:50

没显卡怎么跑Qwen3-Reranker?云端GPU 1小时1块,小白5分钟上手

没显卡怎么跑Qwen3-Reranker&#xff1f;云端GPU 1小时1块&#xff0c;小白5分钟上手 作为一个前端开发者&#xff0c;你可能经常被各种新技术吸引&#xff0c;比如最近发布的Qwen3-Reranker模型。但当你兴冲冲地想体验一下时&#xff0c;却发现自己的MacBook没有独立显卡&…

作者头像 李华
网站建设 2026/5/1 7:20:52

FLUX.1-dev创意工作流:自由职业者用云端GPU接单神器

FLUX.1-dev创意工作流&#xff1a;自由职业者用云端GPU接单神器 你是不是也遇到过这种情况&#xff1a;客户发来一个复杂的插画需求&#xff0c;提示词写得满满当当&#xff0c;刚点下“生成”按钮&#xff0c;电脑风扇就疯狂咆哮&#xff0c;几秒后直接蓝屏重启&#xff1f;攒…

作者头像 李华
网站建设 2026/5/1 8:39:43

年龄性别识别模型部署的3种省钱姿势

年龄性别识别模型部署的3种省钱姿势 你是不是也遇到过这样的情况&#xff1a;作为自由开发者&#xff0c;接了多个客户的人脸分析项目&#xff0c;有的要做美颜App的用户画像&#xff0c;有的是商场客流统计&#xff0c;还有的是互动娱乐小程序。每个项目都要求部署年龄性别识…

作者头像 李华