我有两个主要表格和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
答案 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
尝试一下......希望它成功。