我有一些包含许多列的表格,其中一些是:
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
如果我没有在窗口函数中没有实现的明显特征。 我已经伤透了脑筋,阅读并尝试使用这里的许多建议,但仍然没有找到正确的解决方案。 任何帮助将不胜感激。
我认为针对不同聚合查询的自连接将会执行:
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)