我有一个很长的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)
我的查询显示为null。有没有办法为此co_less_70
列分配默认值?
答案 0 :(得分:3)
是。您可以使用COALESCE()
功能:
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
返回列表中的第一个非NULL值,如果没有非NULL值,则返回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
答案 1 :(得分:2)
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,
答案 2 :(得分:0)
您可以设置默认大小写,但除零之外的任何内容: -
sum(case when shipping_method = 'colissimo' then 1 else some_value end case),2)