SQL聚合具有相同ID的行,辅助列

时间:2017-08-31 16:29:52

标签: sql postgresql aggregate-functions having-clause conditional-aggregation

如果status列中的某个值出现,我希望过滤掉数据库中的行(PostgreSQL)。如果唯一amount只有reference等于status,则可以将1列相加。如果该问题的状态为SELECT或任何其他reference,则该查询不应2 statusstatus指的是交易状态。

当前数据表:

reference | amount | status
   1         100       1       
   2         120       1
   2        -120       2
   3         200       1
   3        -200       2
   4         450       1

结果:

amount | status
  550      1

我已经简化了数据示例,但我认为它可以很好地了解我正在寻找的内容。 我仅选择仅具有状态references的{​​{1}}时未成功。 我尝试使用1子句和其他方法进行子查询但没有成功。

由于

4 个答案:

答案 0 :(得分:2)

这是使用not exists对状态为1的所有行求和的方法,并且不存在具有相同引用和非1状态的其他行。

select sum(amount) from mytable t1
where status = 1
and not exists (
    select 1 from mytable t2
    where t2.reference = t1.reference
    and t2.status <> 1
)

答案 1 :(得分:1)

SELECT SUM(amount)
 FROM table
WHERE reference NOT IN (
 SELECT reference
 FROM table
 WHERE status<>1
)

子查询选择必须排除的所有reference,然后主查询对除了它们之外的所有内容求和

答案 2 :(得分:1)

select sum (amount) as amount
from (
    select sum(amount) as amount
    from t
    group by reference
    having not bool_or(status <> 1)
) s;
 amount 
--------
    550

答案 3 :(得分:0)

您可以使用$('.see-details').on('click', function(){ var id = $(this).data('id'); $('.modal-body').load('getContent.php?id=' + id, function(){ $('#myModal').modal({show:true}); }); }); 来计算每组不同于1的状态:

windowed functions

<强> Rextester Demo