繁体   English   中英

MySQL不加和不带子查询

[英]MySQL distinct sum without subqueries

我有两个主表bills和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

不知道您的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

希望这会起作用...

因此,您的问题是您对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

试试看...希望它能解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM