MySQL показать 0, если выбранное значение равно нулю? - PullRequest
1 голос
/ 20 декабря 2011

У меня длинный SQL-запрос, который вычисляет несколько вещей о платежах и отгрузках.В некоторых случаях значение равно null. Я думаю, это потому, что делится на 0.

Вот небольшая часть моего запроса:

     ROUND(sum(case when shipping_method = 'c' AND (paid_amount - shipping_costs) < 70 then 1 end) * 100 / sum(case when shipping_method = 'c' then 1 end),2) as co_less_70,

Я думаю, что когда эта часть равна 0: sum(case when shipping_method = 'colissimo' then 1 end),2) мой запрос показывает ноль.Есть ли способ назначить значение по умолчанию для этого столбца co_less_70?

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Да. Вы можете использовать функцию COALESCE():

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
Возвращает первое ненулевое значение в списке или NULL, если нет ненулевых значений.

В вашем коде:

COALESCE(
    ROUND(sum(case when shipping_method = 'c' AND (paid_amount - shipping_costs) < 70 then 1 end) * 100 / sum(case when shipping_method = 'c' then 1 end),2),
    0
) AS co_less_70
2 голосов
/ 20 декабря 2011
IFNULL(
  ROUND(sum(case when shipping_method = 'c' AND (paid_amount - shipping_costs) < 70 then 1 end) * 100 / sum(case when shipping_method = 'c' then 1 end),2)
,<default>) AS co_less_70,
0 голосов
/ 20 декабря 2011

Вы можете установить регистр по умолчанию, но все, кроме нуля: -

sum(case when shipping_method = 'colissimo' then 1 else some_value end case),2)
...