某些帐户可能不存在带有行的MySQL Math

时间:2018-08-26 00:22:06

标签: mysql join

在此先感谢您的见解。我公司的数据库不存储帐户拥有的剩余信用数。因此,当需要该数量时,必须从历史上添加到该帐户的所有积分的总和中减去总使用积分的计算。

我要生成的报告是针对特定月份(在此示例中为7月)的,在该月份中,我可以看到在指定月份内所有出现的信用额添加到了帐户中,以及该帐户曾经使用过的总信用额以及然后还有剩余的积分。

添加的信用来自“信用”表(credits.quantity)。 所使用的信用来自发票表(invoices.credits_used)。

我遇到的问题是,并非所有帐户都使用了任何积分。因此,发票表中不存在要用于

的行
added.Credits_Added - used.Credits_Used AS Remaining 

计算。这些帐户已从最终结果中删除,我想保留它们。

我尝试过COALESCE,但是结果没有区别,因为没有条目,没有NULL值,在合并的发票表中没有该accound_id的内容。如果发票联接中不存在任何行,我该如何写成使得Used_Credits值为零?

提琴:http://sqlfiddle.com/#!9/31c11b/1/0

SELECT 
credits.account_id,
credits.created_at,
credits.quantity,
added.Credits_Added,
used.Credits_Used,
added.Credits_Added - used.Credits_Used AS Remaining
FROM credits 


JOIN ( 
SELECT credits.account_id, sum(credits.quantity) AS Credits_Added
FROM credits
GROUP BY credits.account_id
) added ON added.account_id = credits.account_id

JOIN ( 
SELECT invoices.account_id, SUM(invoices.credits_used) AS Credits_Used
FROM invoices
GROUP BY invoices.account_id
) used ON used.account_id = credits.account_id

WHERE DATE_FORMAT(credits.created_at, '%Y-%m') = '2018-07'

0 个答案:

没有答案