0Pricing
SQL Academy · 课时

OVER、PARTITION BY、ORDER BY

理解窗口函数模型:OVER、PARTITION BY(分组)、ORDER BY(排序),以及它与 GROUP BY 的区别。

OVER、PARTITION BY、ORDER BY 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

什么是窗口函数

窗口函数会在与当前行相关的一组行上计算值,而不会像 GROUP BY 那样合并结果。您可以保留每一行,并且获得一个聚合列。

基本示例

在每一行显示整张表的平均订单总额:

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

OVER 子句

OVER (...) 子句定义窗口。空括号表示“整个结果集”。

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY:对窗口分组

它类似于 GROUP BY,但不会合并行:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

窗口中的 ORDER BY

OVER 中的 ORDER BY 定义运行计算时的行顺序:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;

-- Running total per user, ordered by date.

窗口函数与 GROUP BY

并列比较:

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

每一行,不同的框架

“框架”是分区中函数会查看的行集合。带有 ORDER BY 时,默认框架是“从开始到当前行” — 这正是累计总额的实现方式。

命名窗口

如果多个函数共享一个窗口,可以只命名一次:

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

大多数聚合函数都可以作为窗口函数使用

COUNT、SUM、AVG、MIN、MAX 都可以在窗口上使用。专用窗口函数还包括 ROW_NUMBER、RANK、LAG/LEAD、NTILE 等。

窗口函数在 WHERE 之后运行

逻辑顺序为:FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT。因此,WHERE 会在窗口函数计算之前进行筛选。

性能注意事项

窗口函数需要排序(或使用哈希)。对于较大的分区,在(分区列、排序列)上建立索引可以避免排序步骤。

回顾

窗口函数可以为每一行添加聚合值。

  • OVER () = 整个结果
  • PARTITION BY = 对窗口分组
  • 窗口中的 ORDER BY = 启用累计计算

快速检查

SUM(x) OVER (PARTITION BY user_id) 会计算什么?

常见问题解答

「OVER、PARTITION BY、ORDER BY」课时是免费的吗?

是的 — 「OVER、PARTITION BY、ORDER BY」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「OVER、PARTITION BY、ORDER BY」这节课中我会学到什么?

理解窗口函数模型:OVER、PARTITION BY(分组)、ORDER BY(排序),以及它与 GROUP BY 的区别。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「OVER、PARTITION BY、ORDER BY」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. OVER、PARTITION BY、ORDER BY
  2. ROW_NUMBER、RANK、DENSE_RANK
  3. LAG、LEAD 与时间序列模式
  4. 累计总计与移动平均
← 返回 SQL Academy