【问题标题】:Clickhouse: Equivalent for calculating window mean with rows preceding current rowClickhouse:等效于计算当前行之前的行的窗口平均值
【发布时间】:2018-07-23 20:10:47
【问题描述】:

我正在努力寻找滚动平均函数的替代方法。典型窗口函数的等价物如下:

select avg(sales) over (partition by country order by date rows between 4 preceding and 1 preceding) as rolling_mean_last_4
from country_sales

提前非常感谢!

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    目前 ClickHouse 中不支持功能齐全的窗口功能。不过,一些解决方法通常是可行的。

    例如,您可以尝试将此 PARTITION BY 替换为 GROUP BY + groupArray,然后使用 higher order functions 获得所需的结果。如果 GROUP BY 的行数减少是不可接受的,那么您必须找到一种适当的方法将其 JOIN 回原始表。

    听起来很麻烦,但在有利的情况下可能会工作。

    【讨论】:

      【解决方案2】:

      version 21.4开始添加了对窗口函数的完整支持。此时它被标记为实验性功能

      SELECT
          date,
          country,
          sales,
          avg(sales) OVER (PARTITION BY country ORDER BY date ASC ROWS BETWEEN 4 PRECEDING AND 1 PRECEDING) AS rolling_mean_last_4
      FROM 
      (
          /* Emulate the test dataset. */
          SELECT
              toDateTime('2010-01-01') + number AS date,
              toInt32(number / 8) AS country,
              number AS sales
          FROM numbers(32)
      )
      SETTINGS allow_experimental_window_functions = 1
      
      /*
      ┌────────────────date─┬─country─┬─sales─┬─rolling_mean_last_4─┐
      │ 2010-01-01 00:00:00 │       0 │     0 │                 nan │
      │ 2010-01-01 00:00:01 │       0 │     1 │                   0 │
      │ 2010-01-01 00:00:02 │       0 │     2 │                 0.5 │
      │ 2010-01-01 00:00:03 │       0 │     3 │                   1 │
      │ 2010-01-01 00:00:04 │       0 │     4 │                 1.5 │
      │ 2010-01-01 00:00:05 │       0 │     5 │                 2.5 │
      │ 2010-01-01 00:00:06 │       0 │     6 │                 3.5 │
      │ 2010-01-01 00:00:07 │       0 │     7 │                 4.5 │
      │ 2010-01-01 00:00:08 │       1 │     8 │                 nan │
      │ 2010-01-01 00:00:09 │       1 │     9 │                   8 │
      │ 2010-01-01 00:00:10 │       1 │    10 │                 8.5 │
      │ 2010-01-01 00:00:11 │       1 │    11 │                   9 │
      │ 2010-01-01 00:00:12 │       1 │    12 │                 9.5 │
      │ 2010-01-01 00:00:13 │       1 │    13 │                10.5 │
      │ 2010-01-01 00:00:14 │       1 │    14 │                11.5 │
      │ 2010-01-01 00:00:15 │       1 │    15 │                12.5 │
      │ 2010-01-01 00:00:16 │       2 │    16 │                 nan │
      │ 2010-01-01 00:00:17 │       2 │    17 │                  16 │
      │ 2010-01-01 00:00:18 │       2 │    18 │                16.5 │
      │ 2010-01-01 00:00:19 │       2 │    19 │                  17 │
      │ 2010-01-01 00:00:20 │       2 │    20 │                17.5 │
      │ 2010-01-01 00:00:21 │       2 │    21 │                18.5 │
      │ 2010-01-01 00:00:22 │       2 │    22 │                19.5 │
      │ 2010-01-01 00:00:23 │       2 │    23 │                20.5 │
      │ 2010-01-01 00:00:24 │       3 │    24 │                 nan │
      │ 2010-01-01 00:00:25 │       3 │    25 │                  24 │
      │ 2010-01-01 00:00:26 │       3 │    26 │                24.5 │
      │ 2010-01-01 00:00:27 │       3 │    27 │                  25 │
      │ 2010-01-01 00:00:28 │       3 │    28 │                25.5 │
      │ 2010-01-01 00:00:29 │       3 │    29 │                26.5 │
      │ 2010-01-01 00:00:30 │       3 │    30 │                27.5 │
      │ 2010-01-01 00:00:31 │       3 │    31 │                28.5 │
      └─────────────────────┴─────────┴───────┴─────────────────────┘
      */
      

      https://altinity.com/blog/clickhouse-window-functions-current-state-of-the-art

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2020-10-30
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 2015-03-12
        • 2021-06-24
        相关资源
        最近更新 更多