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