x-lin7
A
分屏 专注

窗口函数

6 分钟阅读 · 更新于 2026-05-29T04:34:26.234808Z · #sql #postgres

直觉

聚合函数(sumavg)会把多行合并;窗口函数 在不合并的前提下,对每行算一个跨行的值。

三件套

  • OVER () —— 整张表为一个窗口
  • OVER (PARTITION BY col) —— 按分组划窗口
  • OVER (PARTITION BY col ORDER BY col2) —— 排序后的窗口(支持 ranking)

常用

函数用途
row_number()行号
rank() / dense_rank()排名(含 ties)
lag() / lead()取前 / 后行
sum() OVER (...)累计求和
ntile(n)分箱

SELECT
  user_id, ordered_at, amount,
  sum(amount) OVER (PARTITION BY user_id ORDER BY ordered_at) AS lifetime_value
FROM orders;

每行得到「该用户截至此订单的累计消费」—— SQL 一句话省去整套 ETL。

564 1 0 1
⌘P 跳转 · ⌘K 搜索 · ⌘. 切栏 · ⌘E 编辑