MySQL 的窗口函数,真的是型查询里的神器。像ROW_NUMBER()RANK()OVER()这些,分组内排序、累计求和、环比这些需求,顺手。写起来不像子查询那么绕,性能还挺不错,响应也快,逻辑一目了然。

窗口函数的用法,说白了就是:你能按某个字段分组,但又保留原表结构,还能在组内做排序或聚合。比如,想看每个部门里薪水最高的前 3 名员工?以前得嵌套子查询,现在一句ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC)就搞定,代码简洁,维护起来也轻松。

别看名字叫“窗口”,其实跟前端窗口没关系,更多是“看某个范围内的数据”。像财务报表里常见的“本月 vs 上月”的对比,用LAG()函数就合适,不用自己手动写 JOIN 啰嗦代码了。

对比着用,你也可以看看其他数据库的实现:

,如果你经常写复杂报表、分组统计、排名类查询,MySQL 窗口函数可以省掉一堆子查询和临时表的麻烦。如果你还没上手,可以从这个入门教程开始,讲得还挺清楚的。

哦对了,和分组函数别混淆,前者是逐行,后者是整组聚合,两者配合用才叫爽。如果你对分组还有点懵,也可以顺手看看MySQL 分组查询详解,顺便打个基础。

建议你平时多动手敲几次,像RANK()DENSE_RANK()的区别,多练几遍就清楚了。业务里一旦用起来,你就知道这东西到底有多香了。