PostgreSQL 窗口函数中的不同累积计数

问题描述 投票:0回答:1

我有一些包含许多列的表格,其中一些是:

product_id
territory_id
quarter_num
(例如从 1 到 28 的四分之一数字)。 还有一些其他列,但在此查询中它们不是必需的。 我需要计算每个累积季度每个地区的不同产品数量:第一个只有 1 个,第二个为 1+2,第三个为 1+2+3,依此类推,直到从 1 到 28。 在此之前,该查询是通过循环在 QlikSence 中实现的。现在我需要使用没有循环等的标准 SQL 在 PostgreSQL 中的一个查询中重写它(甚至在长查询的一个 CTE 部分中)。

简单来说就是这样的:

select *
    ,count(distinct product_id) 
        filter(where some_condition) 
        over(partition by territory_id order by quarter_num) 
    as cum_filtered_product_count
from some_table

如果我没有在窗口函数中没有实现的明显特征。 我已经伤透了脑筋,阅读并尝试使用这里的许多建议,但仍然没有找到正确的解决方案。 任何帮助将不胜感激。

postgresql count distinct window-functions cumulative-sum
1个回答
0
投票

我认为针对不同聚合查询的自连接将会执行:

select
    *,
    sum(distinct_product_count) over(partition by territory_id order by quarter_num) as cum_filtered_product_count
from some_table
left join (
    select territory_id, quarter_num, count(distinct product_id) as distinct_product_count
    from some_table
    where some_condition
    group by territory_id, quarter_num
) c using (territory_id, quarter_num)
© www.soinside.com 2019 - 2024. All rights reserved.