2016-10-27 8 views
-1

私は以下のデータセットから毎日の収入を計算したいと考えています。 0がある場合、資産が収益を生み出さないことを意味し、日次収益の計算に含めるべきではありません。数値の日次収益を取得する代わりに、NULL値が返されます。以下は私のコードとデータセットです。SQLの除算で数値の代わりにNULL値が返される

**asset_revenue** 
      15 
      15 
      213 
      0 
      32 
      89 
      -47 

      SUM([asset_revenue])/SUM(CASE WHEN asset_revenue <> 0 THEN 7 ELSE NULL END) 

上記の例では、私は毎日の収入が7.54であると予想しています。 SQLがNULL値を返す理由はありますか?

答えて

0

平均を取得しようとしているようです。

NULLの代わりに0を使用してください。これにより、分母にゼロ以外の値を持つ行の数が等しくなりますasset_revenue。行は毎週の収入を表すか7ニーズが他の何らかの理由のために保持される場合は、これを行う場合は

SELECT SUM([asset_revenue])/
    CASE 
     WHEN SUM([asset_revenue]) <> 0 THEN SUM(CASE WHEN asset_revenue <> 0 THEN 1 ELSE 0 END) 
     ELSE 1 -- Special case where asset_revenue is zero across the entire time period. 0/1 is still zero, so that represents an average revenue of zero. 
    END 

SELECT SUM([asset_revenue])/
    CASE 
     WHEN SUM([asset_revenue]) <> 0 THEN SUM(CASE WHEN asset_revenue <> 0 THEN 7 ELSE 0 END) 
     ELSE 1 -- Special case where asset_revenue is zero across the entire time period. 0/1 is still zero, so that represents an average revenue of zero. 
    END 

@Strawberryがある行は、毎日の収入を表す場合

の理由に対して、スクリプトがNULLを返すように修正してください。 NULLは、値であることがわからないことを意味します。値がわからない場合は、その未知の値が算術演算に入れられ、結果が要求されたときに何が起こるかを知ることができません。 55プラス不明な点は何ですか?知りません!

+0

感謝。しかし、私は日数を組み込むために7を使用する必要があります。 – pandoo

+0

大歓迎です。私は自分の答えを更新しました。しかし、 'asset_revenue'が0でない日ごとに分母* 1を合計するので、ここでは' 1'が正しいかもしれないと思います。つまり、毎日収益がある場合、結果は7 + 1 + 1 + 1 + 1 + 1 + 1の合計になります。 –

+0

私はそれを試みましたが、次のエラーがあります。ゼロエラーが発生しました。 – pandoo

0

理由:支援のための

SELECT 1 + NULL; 
+----------+ 
| 1 + NULL | 
+----------+ 
|  NULL | 
+----------+ 
1 row in set (0.00 sec) 
関連する問題