当我向SQL查询添加聚合函数时,我得到一行返回的空值。如果我取出聚合函数,我没有返回任何行。为什么是这样?如果没有什么可以返回,我不想要一排。在我的架构中,每个信封可以有许多交易。这是我所看到的一个例子:
sqlite> SELECT envelopes.*, SUM(transactions.amount) FROM envelopes LEFT OUTER JOIN transactions ON transactions.envelope_id = envelopes.id WHERE envelopes.user_id = 1;
id name user_id income unassigned parent_envelope_id expense created_at updated_at SUM(transactions.amount)
---------- ---------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ------------------------
sqlite> SELECT envelopes.* FROM envelopes LEFT OUTER JOIN transactions ON transactions.envelope_id = envelopes.id WHERE envelopes.user_id = 1;
sqlite> select sqlite_version();
sqlite_version()
----------------
3.7.5
sqlite>
我很想知道如何使用SUM()函数,并且在没有信息时仍然没有返回任何行。我尝试通过信封表中的所有列进行分组,这似乎可以解决它,但如果我不需要,我宁愿不分组。
答案 0 :(得分:0)
您不需要对每列进行分组。您只需要在envelopes.ID
上进行分组,然后加入以获取剩余的列。请尝试此查询:
SELECT
envelopes.id,
envelopes.col2,
...
envelopes.coln,
totals.total
FROM envelopes
JOIN
(
SELECT envelopes.id, SUM(transactions.amount) AS total
FROM envelopes
LEFT OUTER JOIN transactions
ON transactions.envelope_id = envelopes.id
WHERE envelopes.user_id = 1
GROUP BY envelopes.id
) AS totals
ON totals.id = envelopes.id
答案 1 :(得分:-1)
要使用聚合函数SUM,您应该使用'GROUP BY'。 阅读sql手册,即http://www.tizag.com/mysqlTutorial/mysqlsum.php