Как добавить две суммы - PullRequest
5 голосов
/ 14 июля 2011

Почему не работает следующая работа?

SELECT SUM(startUserThreads.newForStartUser)+SUM(endUserThreads.newForEndUser) AS numNew ...

Возвращает пустую строку.

Однако для моего набора данных возвращается 1:

SELECT SUM(startUserThreads.newForStartUser) AS numNew ...

Как правильно добавить две суммы?

В целом:

SELECT t.*,
       COUNT(startUserThreads.id) + COUNT(endUserThreads.id)                     AS numThreads,
       SUM(startUserThreads.newForStartUser) + SUM(endUserThreads.newForEndUser) AS numNew
FROM   `folder` `t`
       LEFT OUTER JOIN `thread` `startUserThreads`
         ON ( `startUserThreads`.`startUserFolder_id` = `t`.`id` )
       LEFT OUTER JOIN `thread` `endUserThreads`
         ON ( `endUserThreads`.`endUserFolder_id` = `t`.`id` )
WHERE  user_id = :user

К вашему сведению, только два пользователя могут делиться темой в моей модели.Это должно объяснить мои имена столбцов

Ответы [ 2 ]

7 голосов
/ 14 июля 2011
SELECT COALESCE(SUM(startUserThreads.newForStartUser),0)+COALESCE(SUM(endUserThreads.newForEndUser),0) AS numNew ...
1 голос
/ 14 июля 2011

Из документов MySQL

SUM ([DISTINCT] expr)

Возвращает сумму expr.Если в возвращаемом наборе нет строк, SUM () возвращает NULL.Ключевое слово DISTINCT может использоваться в MySQL 5.0 для суммирования только различных значений выражения.

SUM () возвращает NULL, если не было совпадающих строк.

Агрегированные (сводные) функции, такие как COUNT(), MIN () и SUM () игнорируют значения NULL.Исключением является COUNT (*), который считает строки, а не отдельные значения столбцов.

Может быть, попробовать COALESCE (SUM (x), 0) + COALESCE (SUM (y), 0)?

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