代码之家  ›  专栏  ›  技术社区  ›  nearly_lunchtime

在简单查询中去掉被零除

  •  0
  • nearly_lunchtime  · 技术社区  · 17 年前

    这是我所拥有的查询的简化版本。比如说,对于每一个已经下了订单的客户,我想知道他们的总订单价值中有多少是绿色产品。

    一个订单中不能有多个项目,但订单值可能为零,因此我希望避免除法错误。(不,我不能以任何方式更改数据库。)

    最好的方法是什么?编辑:省略零总数实际上是很好的,因此可以接受答案。

    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
    
    4 回复  |  直到 17 年前
        1
  •  2
  •   Binary Worrier    17 年前

    添加

    having sum(order.value) <> 0
    

    在你的小组之后

        2
  •  3
  •   SQLMenace    17 年前
        3
  •  2
  •   Quassnoi    17 年前
    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
    
        4
  •  2
  •   Brandon Montgomery    17 年前

    你能过滤掉order.value=0的订单吗?

    Where
      order.value <> 0