Sql 具有相同值的行之间的差异

Sql 具有相同值的行之间的差异,sql,rows,difference,Sql,Rows,Difference,我有桌子 create table fct_bonus ( date timestamp not null, type varchar(10) not null, amount numeric(19,2) not null, userid varchar(30) not null ) 类型可以是输入或输出,金额始终大于0 我需要找到2016-08-01'日期的userid 123的输入和输出的总和,以及balan,它应该算作所有输入减去userid 123的所有

我有桌子

create table fct_bonus (
    date timestamp not null,
    type varchar(10) not null,
    amount numeric(19,2) not null,
    userid varchar(30) not null
)
类型可以是输入或输出,金额始终大于0

我需要找到2016-08-01'日期的userid 123的输入和输出的总和,以及balan,它应该算作所有输入减去userid 123的所有输出。 我使用这个查询

select distinct userid, type, sum(amount)
from fct_bonus
where userid = 123 and date <= '2016-08-01'
group by type
选择不同的用户ID、类型、总和(金额)
来自fct_奖金

其中userid=123和date似乎与您描述的相同:

select userid,
       sum(case when type = 'IN' then 1 else 0 end) as ins,
       sum(case when type = 'OUT' then 1 else 0 end) as outs,
       sum(case when type = 'IN' then amount when type = 'OUT' then - amount end) as balance
from fct_bonus
where userid = 123 and date <= '2016-08-01'
group by userid;
选择userid,
sum(类型为'IN'时为1,否则为0)作为ins,
求和(当类型为'OUT'时,则为1,否则为0结束)作为OUT,
作为余额的总和(当类型为“IN”时为“case”,当类型为“OUT”时为“amount”,当类型为“OUT”时为“amount end”)
来自fct_奖金

其中userid=123和date编辑您的问题并(1)提供示例数据;(2) 预期结果;和(3)标记你正在使用的数据库。非常感谢,这很有帮助!