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

时间:2015-10-23 22:55:32

标签: postgresql postgresql-9.3 window-functions

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

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进行所有三个查询吗? (没有工会等)

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

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

1 个答案:

答案 0 :(得分: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;