首页 > 解决方案 > postgres 查找同一列的数字之间的差异

问题描述

我有一张如下表

| date       | key | value |   |
|------------|-----|-------|---|
| 01-01-2009 | a   | 25    |   |
| 01-01-2009  | b   | 25    |   |
| 01-01-2009  | c   | 10    |   |

我正在尝试提出一个可以让我(a+b)-c每天都做的查询 - 但我的加入正在这样做(a+b+c)-c

with total as (
select
    sum(value),
    date
from
    A
where
    key in ('a',
    'b')
group by
    date ) 
select
    sum(total.sum) as a, sum(A.value) as b,
    sum(total.sum) - sum(A.value) as value,
        A.date
    from
        A
    join total on
        total.date = A.date
    where
        A.key = 'c'
    group by
        A.date

这给了我一个 50 的值(它应该是 40) - 我的 C 值在连接期间被计算为总表的一部分

我究竟做错了什么?

标签: sqlpostgresql

解决方案


简单地进行条件聚合怎么样?

select date,
       sum(case when key in ('a', 'b') then value 
                when key in ('c') then - value
           end) as daily_calc
from a
group by date;

Ajoin似乎对这个计算没有多大帮助。


推荐阅读