SQL中如何用JOIN和窗口函数实现复杂排名统计?
作者:技术拾光时间:2026-07-21 08:32:13浏览:90
SQL窗口函数中RANK、DENSE_RANK、ROW_NUMBER的区别在于是否跳号;JOIN与窗口函数配合时推荐将窗口计算封装进子查询或CTE;ROWSBETWEEN用于指定滚动计算范围;MySQL和PostgreSQL在RANGE与时间类型组合、GROUPBY后使用窗口函数等方面存在差异,迁移时需注意。
# SQL窗口函数实战:从排名到统计的全场景解析
做数据分析的朋友一定遇到过这样的情况:明明用`RANK()`给销售数据排名,结果出来却是1,1,3,中间跳过了2号位。这到底是怎么回事?其实,这三个排名函数各有各的脾气——`RANK()`遇到并列值会跳号,`DENSE_RANK()`并列不跳号,而`ROW_NUMBER()`则严格按顺序编号,不管值是否相等。

