sql - 汇总SQL查询以汇总组付款

标签 sql sqlite

因此,我有一个用于跟踪小组付款的简单应用。数据库结构如下:



本质上,当您添加付款时,会将其插入到payments表中,并且payers_payments联接表中包含有关每个payer已付款额以及是否应将其包括在付款中的枢轴数据。我的应用程序检索此数据并构建一个语句,显示每个付款人已支付的金额,其应得份额和所欠金额。通过付款和总和显示每个付款人的总和。

示例数据:

付款人付款



付款方式



这是带有2个付款的示例语句(数据与上面的示例数据不匹配)。在第二笔付款中,汤姆不包括在付款(pays = false)中,因此他的公平份额是0,而蒂姆的公平份额是这两次付款的总和除以该付款的pays=true数。



有没有一种方法可以查询每个付款人的总数,而无需单独获取每笔付款并循环遍历以获得总额?我可以轻松获得每个付款人的总付款额:

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个查询可以吗?

最佳答案

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版本。

sum(if())可以替换为

SUM(CASE(payers_payments.pays) WHEN 1 THEN 1 ELSE 0 END AS countOfPays

关于sql - 汇总SQL查询以汇总组付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454101/

相关文章:

mysql - 怎样才能获得最大的值(value)呢?

MySQL:合并两个表(相同模式)并创建一个新表 - SINGLE QUERY

Android:java.lang.OutOfMemoryError 虽然数据库很小

c# - 使用 C# 将数据插入 SQLite 数据库

sql - 在 SQL Server 中将多行与列转换为单行

mysql - SQL 中的表是否可以有多个列作为外键,这些列仅引用另一个表的一个主键?

sql - adodb:createparameter 有什么作用?

java - 安卓 SQLite : CursorIndexOutOfBoundsException when retrieving a row from a table?

android - SQLite 数据库列在不同 Activity 的更新方法中保持 Null

php - 使用循环将记录插入 SQL 数据库