2009-04-20 121 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