窗口函数
6 分钟阅读 · 更新于 2026-05-29T04:34:26.234808Z · #sql #postgres
直觉
聚合函数(sum、avg)会把多行合并;窗口函数 在不合并的前提下,对每行算一个跨行的值。
三件套
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。