所以我有一个简单的应用程序用于跟踪组付款。数据库结构如下:
基本上,当您添加付款时,它会被插入payments
表格,而payers_payments
联接表格中包含有关每个payer
付款金额的轮播数据以及是否应将其包括在内付款。我的应用程序检索此数据并构建一个声明,显示每个付款人已支付的金额,其公平份额和欠款。这通过付款和相加的金额来显示,以给出每个付款人的总额。
示例数据:
payer_payments
付款
这是一个包含2笔付款的示例声明(数据与上面的示例数据不匹配)。在第二笔付款中,汤姆不包括在付款中(pays = false
),因此他的公平份额为0,蒂姆的公平份额是他们的付款总和除以该付款的pays=true
的数量。 / p>
有没有办法查询每个付款人的总数,而无需单独获得每笔付款并循环浏览它们以获得总额?我可以轻松获得每位付款人的总付款额:
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个查询中吗?
答案 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