⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL窗口函数:强大的数据分析利器

学习使用ROW_NUMBER、RANK、SUM OVER等窗口函数进行高级数据分析 · 难度:入门 · +15XP

什么是窗口函数?

窗口函数(Window Function)在保留原始行数据的同时,对行集合(窗口)进行聚合或排序计算。与GROUP BY不同,它不会减少行数,而是为每一行附加计算值。

基本语法

函数名() OVER (
  [PARTITION BY 列名]   -- 分组,可选
  [ORDER BY 列名]       -- 排序,可选
  [ROWS/RANGE 行范围]   -- 窗口范围,可选
)

常用窗口函数

函数功能
ROW_NUMBER()为每行分配唯一序号,从1开始
RANK()排名,并列时跳过后续序号
DENSE_RANK()排名,并列时不跳过序号
SUM()/AVG()/MAX()窗口内的聚合计算
LAG()/LEAD()访问当前行前/后行数据

实战:部门内薪资排名

SELECT name, dept_id, salary,
  ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS row_num,
  RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rank,
  DENSE_RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dense_rank
FROM employees;

移动平均计算

SELECT sale_date, amount,
  AVG(amount) OVER (ORDER BY sale_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg_3day
FROM daily_sales;

计算当前行及前两行的平均销售额,实现3日移动平均。

练习提示

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0