首页 > 解决方案 > BigQuery 中除以 0 错误,即使短路也应该防止它

问题描述

在我的数据中,该fulfillment_ratio字段可能等于或可能不等于 0。我不知道为什么我仍然得到除以 0 的错误。我以为我正在使用语句进行短路,IF以便如果给定组存在 0,则不会进行计算。

SELECT
    order_key,
    order_source,
    sale_item.key AS key,
    ANY_VALUE(sale_item.name) AS name,
    ANY_VALUE(sale_item.sku) AS sku,
    ANY_VALUE(sale_item.quantity) * MIN(fulfillment_ratio) AS quantity_counted,
    MIN(sale_item.base_price) AS price,
    IF(COUNTIF(fulfillment_ratio = 0) > 0, 0, SUM(cogs / fulfillment_ratio) * MIN(fulfillment_ratio)) AS cost_of_goods_sold
  FROM 
    order_product_stockable_items
  GROUP BY
    order_key,
    order_source,
    sale_item.key

正如您在 SELECT 列表的最后一行中看到的那样,我正在计算是否有任何情况fulfillment_ratio = 0,如果有的话,我认为0会返回并且不会评估错误条件。但是,我仍然得到除以 0 的错误。这怎么可能?有一个更好的方法吗?

标签: sqlgoogle-bigquery

解决方案


你可以使用NULLIF

COALESCE(SUM(cogs / NULLIF(fulfillment_ratio,0)) * MIN(fulfillment_ratio),0)

推荐阅读