如何计算具有窗口函数的过滤器的总数?

Posted

技术标签:

【中文标题】如何计算具有窗口函数的过滤器的总数?【英文标题】:How to calculate totals for a filter with a window function? 【发布时间】:2015-10-23 22:55:32 【问题描述】:

我有 Postgres 9.3 数据库和一个包含许多行的表。我有一个过滤器表达式,想计算sumcount 3 种类型:

1) 表达式为真 2) 表达式为假 3) 所有行

计算第一个的例子:

select count(*) from osm_polygon where building in ('dormitory', 'офис', 'office',
'school', 'kindergarten', 'residential', 'public', 'yes', 'house',
'apartments', 'roof', 'detached', 'civic', 'shop', 'apartments;yes', 'hotel'));

这可以用window function 完成所有三个查询吗? (没有工会等)

我已经阅读了有关窗口函数的文档和其他示例,但这对我来说仍然完全模糊。

附:我知道我可以使用with 子句或嵌套查询,但只是为了学习,我想尝试使用窗口函数/聚合表达式。

【问题讨论】:

【参考方案1】:

示例数据:

create table a_table (id int, val int);
insert into a_table values
(1, 1), (2, 2), (3, 3);

aggregate expressions 的查询:

select
    sum(val) filter (where id = 1) sum1,
    sum(val) filter (where id != 1) sum2,
    sum(val) sum3
from a_table;

【讨论】:

我看到你显示聚合表达式的底部,这就是我需要的。谢谢!

以上是关于如何计算具有窗口函数的过滤器的总数?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中使用窗口函数运行“匹配”总数

SQL Server 使用窗口函数计算 AVG()

在窗口函数中计算具有相等值的行

PySpark 中的窗口函数和条件过滤器

使用窗口函数获取总数

具有 CTE 的 T-SQL 窗口函数,使用先前计算的值