Ответ 1
Попробуйте следующее:
select COALESCE(sum(balance),0) from mytable where customer = 'john'
Это должно делать работу. Метод coalesce должен возвращать значение 0.
Я пытаюсь суммировать балансы клиентов, используя следующий запрос:
select sum(balance) from mytable where customer = 'john'
Однако, если у клиента нет баланса (т.е. нет соответствующих строк в таблице mytable
), мой запрос возвращает null, а не 0. В чем проблема?
Попробуйте следующее:
select COALESCE(sum(balance),0) from mytable where customer = 'john'
Это должно делать работу. Метод coalesce должен возвращать значение 0.
Это не проблема. Если строк нет, sum()
вернет null
. Он также вернет null
, если все строки имеют баланс null
.
Вместо этого возвратите нуль, попробуйте:
select isnull(sum(balance),0) from mytable where customer = 'john'
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john'
Попробуйте следующее:
select sum(IsNull(balance,0)) from mytable where customer = 'john'
Возможно, вы думаете о COUNT
поведении?
COUNT(Field)
вернет 0
, но SUM(Field)
возвращает NULL
, если нет соответствующих строк.
Вам понадобится ISNULL
или COALESCE