首页 > 解决方案 > PostgreSQL - SUM 真假列和按月分组,给我一个百分比

问题描述

我有一个带有 id 的表和一些我已经过滤的其他数据。首先我想知道我如何转换成一个输出的新表

select A, B from Table
where B between '2020-03-01' and '2020-04-30'
order by B ASC
;

我有这样的输出:

A       B
1    12-03-2000
0    12-04-2000
1    03-02-2000
1    04-02-2000
0    02-05-2001

我的兴趣只集中在 2 个月我想知道百分比代表每个月真假(分别)的总和

标签: sqlpostgresqlboolean

解决方案


我认为您希望列中的月份具有每个月的真假百分比。使用条件聚合:

select A,
       count(*) filter (where month(b) = 3) * 1.0 / sum(count(*)) filter (where extract(month from b) = 3) as march,
       count(*) filter (where extract(month from b) = 4) * 1.0 / sum(count(*)) filter (where month(b) = 4) as april
from Table
where B between '2020-03-01' and '2020-04-30'
group by A;

推荐阅读