2009-04-20 14 views
0

これは私が持っているクエリの簡略化されたバージョンです。注文した各顧客について、その合計注文額の何%がグリーン商品であるかを知りたいと思う。簡単なクエリで0で除算すること

オーダー内に複数のアイテムが存在することはできませんが、オーダー値がゼロである可能性がありますので、除算エラーを回避したいと考えています。 (そして、いいえ、私はデータベースを一切変更することができません)

これを行うにはどうすればよいでしょうか?編集:ゼロ合計を省略することは実際には、したがって受け入れられた答えは大丈夫です。

SELECT order.customer, 
    SUM 
    (
    CASE items.color WHEN 'Green' THEN order.value 
    ELSE 0 END 
) * 100/sum(order.value) AS percentage, 
    SUM(order.value) AS total_value 
FROM orders 
    INNER JOIN item 
    ON order.item_id = item.item_id 
GROUP BY order.customer 

答えて

2

+0

これはいくつかの注文を除外することがあります。 – Quassnoi

+0

実際には、 "where order.value <> 0"と言ってもいいと思います。それはレコードをフィルタリングして、 "having"句の必要性を排除します。 –

+0

それは本当ですが、ユーザーに売却された緑色の商品が0%だったことを示すレポートを見たいというチャンスは何ですか? –

2
SELECT order.customer, 
    SUM 
    (
    CASE items.color WHEN 'Green' THEN order.value 
    ELSE 0 END 
) * 100/CASE sum(order.value) WHEN 0 THEN 1 ELSE SUM(order.value) END AS percentage, 
    SUM(order.value) AS total_value 
FROM orders 
    INNER JOIN item 
    ON order.item_id = item.item_id 
GROUP BY order.customer 
2

は、あなただけのオーダーorder.value = 0を除外することはできますか?

Where 
    order.value <> 0 
+0

顧客の注文額の合計がゼロである可能性があるため、十分ではありません –

+1

OK、顧客は緑色のウィジェットを10個購入し、緑色であると判断して返却し、それ以外の場合は緑色のウィジェットを購入します。その顧客には2つの注文があり、どちらもゼロではありませんが、その顧客に結合された場合はゼロに加算されます。 "order.value <> 0"はどのように役立ちますか? –

+0

良い点。説明をありがとう。 –

関連する問題