首页/数据/NoSQL 速查/窗口函数与 OVER 子句
本包目录(322 条)
MongoDB99 条Elasticsearch89 条
ClickHouse56 条
时序与列式28 条选型与架构50 条

窗口函数与 OVER 子句

ClickHouse 支持标准窗口函数:OVER (PARTITION BY … ORDER BY …) 配合 row_number、rank、lagInFrame/leadInFrame 与聚合函数,用于排名、同环比与滚动计算。

NoSQL 速查数据更新于 2026-10-12
语法func() OVER ([PARTITION BY …] [ORDER BY …] [ROWS BETWEEN …])
常用函数row_number、rank、dense_rank、lagInFrame、leadInFrame、sum/avg OVER
命名窗口WINDOW w AS (PARTITION BY …),多个表达式复用

示例

示例
SELECT
    user_id,
    ts,
    sum(value) OVER (
        PARTITION BY user_id
        ORDER BY ts
        ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    ) AS rolling3
FROM metrics
ORDER BY user_id, ts;
窗口函数在结果集上计算,内层查询先做好过滤与聚合能显著降低内存与耗时。

易错点

  • lagInFrame/leadInFrame 与部分数据库的 lag/lead 语义不同,边界帧需按官方说明设置
  • 超大分区上的窗口排序会占用较多内存,尽量让 PARTITION BY 键与数据有序性一致

数据来源与参考

  • ClickHouse Docs: Window functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌