MYSQL сумма нескольких столбцов возвращает ноль - PullRequest
0 голосов
/ 26 мая 2020
SUM((((((((((`generalSum`.`total` + `FFBHARVESTINGsum`.`total`) + `PRUNINGsum`.`total`) + `FIELDMAINTENANCEsum`.`total`) + `PESTDISEASEsum`.`total`) + `PLANTINGSUPPLYINGsum`.`total`) + `BUILDINGCONSTRUCTIONsum`.`total`) + `INFRAMAINTENANCEsum`.`total`) + `NURSERYsum`.`total`) + `TRANSPORTATIONsum`.`total`)) AS `totalOfall`

Кажется, что приведенное выше возвращает значение null, я пробовал объединить, но это тоже не помогает. все таблицы представляют собой представления, может ли это вызвать проблему?

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Вероятно, одно из значений NULL. Если это так, вся сумма равна NULL.

Обернуть каждый столбец в

IFNULL(value, 0)
0 голосов
/ 26 мая 2020

В вашем выражении слишком много круглых скобок, но это не влияет на результаты, только на удобочитаемость и удобство обслуживания.

SUM() возвращает NULL только тогда, когда выражение в SUM() - это NULL для всех строк. Это потому, что SUM() игнорирует NULL значения, поэтому, если хотя бы один результат выражения не был NULL, то SUM() не было бы NULL.

Выражение будет NULL, если любое значений в строке равно NULL. Это потому, что добавление NULL к любому значению возвращает NULL - в отличие от SUM(). Итак, я предполагаю, что одно или несколько значений NULL в любой заданной строке.

Вы можете исправить это, заменив NULL значения на 0, используя COALESCE():

sum( coalesce(generalSum.total, 0) + 
     coalesce(FFBHARVESTINGsum.total, 0) +
     coalesce(PRUNINGsum.total, 0) +
     . . .
   )

Это не имеет ничего общего с использованием вида как такового .

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