与汇总和分析功能不同

时间:2020-03-17 20:21:46

标签: postgresql distinct window-functions

我只是很好奇,在Postgres中有办法做到这一点吗?

SUM(DISTINCT column_a) OVER(PARTITION BY column_b, column_c)

使用DISTINCT会导致错误:窗口功能未实现DISTINCT

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

SELECT column_a,
       column_b,
       column_c,
       sum(column_a) FILTER (WHERE is_new) OVER w
FROM (SELECT column_a,
             column_b,
             column_c,
             column_a IS DISTINCT FROM lag(column_a) OVER w AS is_new
      FROM atable
      WINDOW w AS (PARTITION BY column_b, column_c ORDER BY column_a)
     ) AS q
WINDOW w AS (PARTITION BY column_b, column_c ORDER BY column_a);

在内部查询中,column_a的所有重复项都将得到is_new = FALSE,因此这些重复项不在外部查询中计算。