【问题标题】:Aggregate values by row count按行数聚合值
【发布时间】:2012-10-25 22:02:23
【问题描述】:

我有一系列行,我需要将这些行中的值聚合到 N 元素组中,从当前行和 N-1 后续行中累积值。

N=3 和数据是:

VALUES (1),(2),(3),(4),(5);

我想收到以下一组行(数组):

{1,2,3}
{2,3,4}
{3,4,5}
{4,5}
{5}

重要的是,N 是一个变量,所以我不能使用连接。

【问题讨论】:

    标签: arrays aggregate window-functions postgresql-9.2


    【解决方案1】:

    嗯,这个可以解决using frames together with window functions

    题目中的问题可以这样解决:

    WITH v(v) AS (VALUES (1),(2),(3),(4),(5))
    SELECT v,
           array_agg(v) OVER (ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS arr
      FROM v;
    

    以下示例说明了如何获取完整数组的列表,即消除那些不包含所有 N 条目的列表:

    WITH cnt(c) AS (SELECT 3),
         val(v) AS (VALUES (1),(2),(3),(4),(5)),
         arr AS
    (SELECT v,
            array_agg(v) OVER (ROWS BETWEEN CURRENT ROW
                               AND (SELECT c-1 FROM cnt) FOLLOWING) AS arr
       FROM val)
    SELECT v,arr
      FROM arr
     WHERE array_upper(arr,1) = (SELECT c FROM cnt);
    

    我真的很喜欢窗口函数!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多