mySQL选择基于与另一个字段值相比的行总和

时间:2014-02-23 20:00:44

标签: mysql

我有一张发票项目表。单个交易可能导致多个借方项目和多个贷方项目共享相同的invoice_set_id,我需要将借方项目的总和与贷方项目的总和进行比较,并且如果sum(借方)>将invoice_set_id添加到结果集合中。总和(学分)。如果没有信用额度的行,它也应该添加到结果中。使用mySQL。谢谢你的帮助。示例表和结果如下:

invoice_item_id  invoice_set_id  credit_debit  amount
62                a22             debit         15.00
63                a22             debit          8.00
64                a22             credit        23.00
65                b23             debit         44.00
66                c55             debit         15.00
67                c55             debit          2.00
67                c55             credit         8.00

鉴于上述情况,结果集应为:

invoice_set_id
b23
c55

说明:由于借方和贷方相等而未退还a22,因为借方但没有贷记而退还b23,并且因为借方总和大于单笔贷款而退还c55。

我感谢任何帮助。实际查询涉及更多,但我认为这个特殊问题是我需要帮助的。

1 个答案:

答案 0 :(得分:1)

您只需使用group byhaving

即可
select invoice_set_id
from t
group by invoice_set_id
having sum(case when credit_debit = 'debit' then amount else 0 end) > sum(case when credit_debit = 'credit' then amount else 0 end) ;

表达having子句的另一种方式是:

having sum(case when credit_debit = 'debit' then amount
                when credit_debit = 'credit' then - amount
                else 0
           end) > 0;