1. 和group by的区别是窗口函数不合并明细行,只是新增一列结果,而group by聚合结果 2. 3 个最常用场景 - 排名类|ROW_NUMBER/RANK/DENSE_RANK 👉 场景:各部门薪资排名、各品类销量 TOP3 sql SELECT 姓名, 部门, 薪资, ROW_NUMBER() OVER(PARTITION BY 部门 ORDER BY 薪资 DESC) AS 排名 FROM 员工表; ✅ ROW_NUMBER:不并列(1,2,3) ✅ RANK:并列跳号(1,1,3) ✅ DENSE_RANK:并列不跳号(1,1,2) - 累计类|SUM/AVG 👉 场景:逐日累计销售额、月度平均客单价 sql SELECT 日期, 销售额, SUM(销售额) OVER(ORDER BY 日期) AS 累计销售额, AVG(销售额) OVER(ORDER BY 日期 ROWS 6 PRECEDING) AS 7日均值 FROM 销售表; ⚠️ 7 日均值用ROWS 6 PRECEDING,就是 “当前行 + 前 6 行” - 跨行对比|LAG/LEAD 👉 场景:环比增长、前后数据对比(最常用!) 等同于自关联,但是更简洁 sql SELECT 日期, 销售额, LAG(销售额,1) OVER(ORDER BY 日期) AS 上月销售额, -- 取上1行 销售额 - LAG(销售额,1) OVER(ORDER BY 日期) AS 环比差值 FROM 销售表; ✅ LAG = 取上面的行,LEAD = 取下面的行,偏移量默认 1