⚡ 编程实验室🏗️ 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等窗口函数进行分组排名、滚动计算和移动平均。 · 难度:入门 · +15XP

什么是窗口函数?

窗口函数(Window Function)可以在不改变行数的情况下,对一组相关行进行计算。它使用OVER()子句来定义窗口(即行集),并返回每个行的聚合值或排名。

1. 基本语法

SELECT name, department, salary,
       ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank_in_dept
FROM employees;

2. 常用窗口函数

函数作用
ROW_NUMBER()为每行分配唯一连续整数
RANK()排名,相同值并列,跳过后续排名
DENSE_RANK()排名,相同值并列,不跳过排名
SUM() OVER累计求和
AVG() OVER移动平均
LAG() / LEAD()访问前一行/后一行数据

3. 窗口与聚合的区别

聚合函数(如GROUP BY)会减少行数,而窗口函数保留所有行,每一行都能看到窗口内的计算结果。

4. 实际案例:部门内工资排名

SELECT name, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

5. 练习提示

写出一个查询,为每位员工计算其所在部门的累计工资占比(即该员工工资占部门总工资的百分比)。使用SUM() OVER。

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

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0