Sql 查询 Postgresql 数据库

Sql query for Postgresql database

我在 table 中有 4 列。

A <date>
B <boolean>
C <boolean>
D <numeric>

我想从数据库中按日期获取结果,其中:

如果 B 为真,则当天 D 的总和
如果 C 为真那么 D 的总和

  A         B   C    D
11/1/2014   T       50
11/1/2014   T       40
11/1/2014       T   20
12/1/2014   T       60
12/1/2014   T       70
13/1/2014       T   55
13/1/2014       T   20
14/1/2014       T   10
14/1/2014   T       18

想要的结果

A            E   F
11/1/2014   90  20
12/1/2014   130 0
13/1/2014       75
14/1/2014   18  10
select a, 
       sum(case when b then d end) as e,
       sum(case when c then d end) as f
group by a;

如果您使用的是 Postgres 9.4,则可以通过使用过滤聚合来提高可读性

select a, 
       sum(d) filter (b) as e,
       sum(d) filter (c) as f
group by a;