postgresql 选择正值和负值之和:波斯特格雷斯

unhi4e5o  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(2)|浏览(110)

我有一个计算用户帐户余额的总和或平均值的简单任务。
用户在该月期间可能具有负余额或正余额。以下是用户在当前月份的余额示例

95.63
97.13
72.14
45.04
20.04
10.63
-29.37
-51.35
-107.55
-101.35
-157.55
-159.55
-161.55

我愿意
1.选择负值,计算其总和/平均值
1.选择正值,计算其总和/平均值
1.用2列表示
预期结果

340.61      -768.27

当我使用UNION操作符时,我得到两行。当使用CASE.. WHEN..时,它会对余额进行分组,我会收到多行。
在我的postgres查询中还有其他聚合函数,所以我希望每个函数都显示在单独的列中。有什么办法吗?

zbdgwd5y

zbdgwd5y1#

在Postgres 9.1中:

select
    sum(case when val >= 0 then val end) as positive,
    sum(case when val < 0 then val end) as negative
from the_data;

Postgres 9.4+的替代解决方案:

select 
    sum(val) filter (where val >= 0) as positive,
    sum(val) filter (where val < 0) as negative
from the_data;
wsxa1bj1

wsxa1bj12#

v=# select sum(case when f < 0 then f end) n, sum(case when f >= 0 then f end) p from s170;
    n    |   p
---------+--------
 -768.27 | 340.61
(1 row)

为什么不用case两次?

相关问题