mySQL根据与另一个字段值相比的行数总和进行选择

mySQL根据与另一个字段值相比的行数总和进行选择,mysql,Mysql,我有一张发票项目表。单个交易可能会导致多个借方项目和多个贷方项目共享同一发票\u集\u id,我需要将借方项目的总和与贷方项目的总和进行比较,如果总和(借方)>总和(贷方),则将发票\u集\u id添加到结果集。如果没有包含贷方金额的行,则还应将其添加到结果中。使用mySQL。谢谢你的帮助。示例表和结果如下: invoice_item_id invoice_set_id credit_debit amount 62 a22 debit

我有一张发票项目表。单个交易可能会导致多个借方项目和多个贷方项目共享同一发票\u集\u id,我需要将借方项目的总和与贷方项目的总和进行比较,如果总和(借方)>总和(贷方),则将发票\u集\u 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返回,因为借方之和大于单个贷方


我非常感谢你在这方面的帮助。实际的查询更复杂,但我认为这个特定的问题就是我需要帮助的地方。

您只需使用
groupby
having

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;

美丽的。又短又甜。我测试了示例1,结果正是我想要的。谢谢