当我向没有结果的查询添加聚合函数时,我得到一个空行

时间:2011-11-26 23:21:45

标签: sql database sqlite

当我向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()函数,并且在没有信息时仍然没有返回任何行。我尝试通过信封表中的所有列进行分组,这似乎可以解决它,但如果我不需要,我宁愿不分组。

2 个答案:

答案 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