与聚合和分析功能不同
Distinct with Aggregation and Analytical functions
我很好奇,有没有办法在 Postgres 中做到这一点?
SUM(DISTINCT column_a) OVER(PARTITION BY column_b, column_c)
使用 DISTINCT 会导致错误:window 函数未实现 DISTINCT
这应该可以解决问题:
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
,因此这些重复项不计入外部查询。
我很好奇,有没有办法在 Postgres 中做到这一点?
SUM(DISTINCT column_a) OVER(PARTITION BY column_b, column_c)
使用 DISTINCT 会导致错误:window 函数未实现 DISTINCT
这应该可以解决问题:
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
,因此这些重复项不计入外部查询。