Это упрощенная версия запроса, который у меня есть. Скажите каждому клиенту, который сделал заказ, я хочу знать, какой процент от их общей стоимости заказа был для зеленых предметов.Выход из деления на ноль в простой запрос
В заказе не может быть нескольких элементов, но значение заказа может быть нулевым, поэтому я хочу избежать ошибок разделения. (И нет, я никак не могу изменить базу данных.)
Каков наилучший способ сделать это? EDIT: Опущение нулевых итогов на самом деле прекрасное, поэтому принятый ответ.
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
Это может отфильтровывать некоторые заказы. – Quassnoi
На самом деле, я думаю, было бы лучше сказать «Where order.value <> 0» - это будет отфильтровывать записи, устраняя необходимость в «наличии». –
Это правда, но каковы шансы, что пользователь хочет увидеть отчет, где он показывает, что есть 0% зеленых предметов, проданных клиентам, которые не тратили на нас никаких денег? –