聚合SQL查询以汇总组付款

时间:2014-03-17 12:19:15

标签: sql sqlite

所以我有一个简单的应用程序用于跟踪组付款。数据库结构如下:

enter image description here

基本上,当您添加付款时,它会被插入payments表格,而payers_payments联接表格中包含有关每个payer付款金额的轮播数据以及是否应将其包括在内付款。我的应用程序检索此数据并构建一个声明,显示每个付款人已支付的金额,其公平份额和欠款。这通过付款和相加的金额来显示,以给出每个付款人的总额。

示例数据:

payer_payments

enter image description here

付款

enter image description here

这是一个包含2笔付款的示例声明(数据与上面的示例数据不匹配)。在第二笔付款中,汤姆不包括在付款中(pays = false),因此他的公平份额为0,蒂姆的公平份额是他们的付款总和除以该付款的pays=true的数量。 / p>

enter image description here

有没有办法查询每个付款人的总数,而无需单独获得每笔付款并循环浏览它们以获得总额?我可以轻松获得每位付款人的总付款额:

SELECT payers_payments.payer_id, 
       Sum(payers_payments.amount) AS SumOfamount
  FROM payers_payments
GROUP BY 
       payers_payments.payer_id;

但如何获得公平份额?基本上我需要将每笔付款的金额加总,然后除以pays=true以获得付款的公平份额的付款人数,如果他们有pay=true,则将其加到付款人的公平份额总额中那付款。这可能在1个查询中吗?

1 个答案:

答案 0 :(得分:0)

SELECT payers_payments.payer_id, 
       Sum(payers_payments.amount) AS SumOfamount,
       Sum(if(payers_payments.pays=1,1,0)) AS countOfPays
  FROM payers_payments
GROUP BY 
       payers_payments.payer_id;

那是MySQL版本。

总和(if())可以替换为

SUM(CASE(payers_payments.pays) WHEN 1 THEN 1 ELSE 0 END AS countOfPays
相关问题