没有子查询的MySQL不同总和

时间:2014-01-13 23:26:37

标签: mysql sql

我有两个主要表格和billing_items:

bills
_______
id
..
amount
balance

billing_items
______________
id
...
bill_id

我需要根据billing_items表中的某些条件获得账单金额和余额的总和(该表引用其他感兴趣的表格)

当我使用以下查询时,我得到重复:

select sum(b.amount), sum(b.balance) 
from bills b left join billing_items bi 
on b.id=bi.bill_id;

由于我正在使用的ORM(不支持子查询),我无法使用下面的子查询:

select sum(a) from 
(select b.amount as a, b.balance 
   from bills b left join billing_items bi 
   on b.id=bi.bill_id group by b.id) t;

关于billing_items及其引用表的标准已被忽略,但我需要引用billing_items

2 个答案:

答案 0 :(得分:1)

不确定你的ORM是否允许在你的SQL中使用用户变量,如果是,你可以试试这个,基本上它是ORDER BY bi.bill_id并且只有当有新的bill_id

select sum(IF (@prevBillId IS NULL OR @prevBillId != bi.bill_id,b.amount,0)) as sumAmount, 
       sum(IF (@prevBillId IS NULL OR @prevBillId != bi.bill_id,b.balance,0)) as sumBalance,
       @prevBillId:=bi.bill_id
from bills b left join billing_items bi 
on b.id=bi.bill_id
ORDER BY bi.bill_id;

请参阅此sqlFiddle

答案 1 :(得分:0)

希望这会有用......

因此,您的问题是,您对billing_items的左连接导致每个结算项目产生多行,并且您的总和(b.amount)将乘以您拥有的行数。所以解决方案......将你的总和除以你的数量。

select b.id,sum(b.amount) / count(*) as amount, sum(b.balance) 
from bills b left join billing_items bi 
on b.id=bi.bill_id;
group by b.id

尝试一下......希望它成功。