Выход из деления на ноль в простом запросе - PullRequest
0 голосов
/ 20 апреля 2009

Это упрощенная версия запроса, который у меня есть. Скажем, для каждого клиента, который сделал заказ, я хочу знать, какой процент от общей стоимости заказа был для зеленых товаров.

В заказе не может быть несколько позиций, но возможно, что стоимость заказа равна нулю, поэтому я хочу избежать ошибок деления. (И нет, я никак не могу изменить базу данных.)

Какой лучший способ сделать это? РЕДАКТИРОВАТЬ: Пропуск нулевых итогов это нормально, следовательно, принятый ответ.

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 ]

3 голосов
/ 20 апреля 2009
2 голосов
/ 20 апреля 2009

Можете ли вы просто отфильтровать заказы, где order.value = 0?

Where
  order.value <> 0
2 голосов
/ 20 апреля 2009

Добавить

having sum(order.value) <> 0

После вашей группы

2 голосов
/ 20 апреля 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...