2011-12-20 14 views
1

私は支払いと出荷についていくつかを計算する長いSQLクエリを持っています。選択した値がnullの場合、mysql show 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を示す値がnull.あるいくつかのケースでは、私はそこに0

によって分割されます。ここの小さな私のクエリの一部だからそれはだと思います。このco_less_70列にデフォルト値を割り当てる方法はありますか?

+2

あなたは 'IFNULL'を試しましたか? – Jomoos

答えて

4

はい。何の非NULL値がない場合

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
は、リスト内の最初の非NULL値を返し、またはNULL:あなたはCOALESCE()機能を使用することができます。あなたのコードで

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

あなたはデフォルトのケースを設定することができますが、ゼロ以外のもの: -

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

ユーザは、除数が「0」のときのデフォルト値だけでなく、NULLのときに列全体のデフォルト値を割り当てたいと思う。 –

+0

shipping_method = 'c'の行がない場合は、0/0となり、問題の原因となっている可能性があります。これで修正されることはありません。他の値は数学を捨てます。 – cHao

3
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, 
関連する問題