2014-06-20 42 views
0

我正在跟踪MySQL中的交易,并且我正在尝试汇总一份报告以显示给定月份的每个帐户的总计。现在,我可以通过它向我显示任何有交易帐户的总计,但问题是我需要它还返回没有交易的帐户,而目前的查询没有这样做。按帐户统计所有帐户的交易

我的数据库设计有两个表,一个用于帐户(每个帐户都有一个名称和ID)以及一个交易表(带有id,accountId,日期和金额字段)。我目前的查询是这样的:

SELECT 
    SUM(transactions.amount) AS monthly_total, 
    accounts.id AS account_id, 
    accounts.name AS account_name 
FROM accounts 
LEFT JOIN transactions ON transactions.accountId = accounts.id 
WHERE transactions.date BETWEEN '2014-01-01' AND '2014-01-31' 
GROUP BY accounts.id 
ORDER BY accounts.name 

就像我说的,这个查询的作品除了它不返回所有帐户。它只返回记录交易的账户。有任何想法吗?

回答

3

您的WHERE条件会过滤掉没有交易的帐户。

尝试 -

SELECT 
    SUM(transactions.amount) AS monthly_total, 
    accounts.id AS account_id, 
    accounts.name AS account_name 
FROM accounts 
LEFT JOIN transactions ON transactions.accountId = accounts.id 
     AND transactions.date BETWEEN '2014-01-01' AND '2014-01-31' 
GROUP BY accounts.id 
ORDER BY accounts.name 
0

试试这个

... 
sum(ifnull(transactions.amount, 0)) 
... 
right JOIN transactions ON transactions.accountId = accounts.id 
... 
相关问题