Когда я добавляю статистическую функцию в запрос без результатов, я получаю пустую строку - PullRequest
0 голосов
/ 27 ноября 2011

Когда я добавляю статистическую функцию в запрос 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 голосов
/ 27 ноября 2011

Вам не нужно группировать по каждому столбцу. Вам просто нужно сгруппироваться по 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
0 голосов
/ 27 ноября 2011

Чтобы использовать агрегатную функцию SUM, далее вам следует использовать «GROUP BY».прочитайте руководство sql, т.е. http://www.tizag.com/mysqlTutorial/mysqlsum.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...