2009-04-20 28 views
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

添加

having sum(order.value) <> 0 

您的組後由

+0

這可能會過濾掉一些訂單。 – Quassnoi 2009-04-20 16:28:41

+0

實際上我認爲最好是說「where order.value <> 0」 - 這將會過濾出他的記錄,而不需要「having」子句。 – 2009-04-20 16:29:52

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