[英]Redshift - Divide by zero error
我遇到以下問題,不斷拋出“除以零”錯誤
下面給出的是我正在使用的查詢:
select cust_name,
sum(case WHEN sale_date > CURRENT_TIMESTAMP-14 AND sale_date < CURRENT_TIMESTAMP then 1 else 0 END) AS "0_2_sales_count",
sum(case WHEN sale_date > CURRENT_TIMESTAMP-28 AND sale_date < CURRENT_TIMESTAMP-14 then 1 else 0 END) AS "2_4_sales_count",
("0_2_sales_count") - ("2_4_sales_count") as "load_volume_diff_0_2_2_4",
(("0_2_sales_count" - "2_4_weeks_load_volume")/"2_4_sales_count"::float) * 100 as "load_volume_diff_percent_0_2_2_4"
from sales
group by cust_name;
我在“0_2_sales_count”和“2_4_sales_count”列中有不同客戶的零。 任何人都可以建議我如何處理上述錯誤。 我嘗試在 column = 0 時使用 case,但仍然出現相同的問題。
我正在使用 Amazon Redshift 數據庫。
謝謝
您可以使用案例檢查“2_4_sales_count”中的 0 並為每種情況使用正確的代碼
select cust_name,
sum(case WHEN sale_date > CURRENT_TIMESTAMP-14
AND sale_date < CURRENT_TIMESTAMP then 1 else 0 END) AS "0_2_sales_count",
sum(case WHEN sale_date > CURRENT_TIMESTAMP-28
AND sale_date < CURRENT_TIMESTAMP-14 then 1 else 0 END) AS "2_4_sales_count",
("0_2_sales_count") - ("2_4_sales_count") as "load_volume_diff_0_2_2_4",
CASE WHEN "2_4_sales_count"::float = 0
THEN 0 ELSE (("0_2_sales_count" - "2_4_weeks_load_volume")/"2_4_sales_count"::float) * 100 END as "load_volume_diff_percent_0_2_2_4"
from sales
group by cust_name;
當 "2_4_sales_count"::float =0 then 1 end 時,嘗試使用 case
select cust_name,
sum(case WHEN sale_date > CURRENT_TIMESTAMP-14 AND sale_date < CURRENT_TIMESTAMP then 1 else 0 END) AS "0_2_sales_count",
sum(case WHEN sale_date > CURRENT_TIMESTAMP-28 AND sale_date < CURRENT_TIMESTAMP-14 then 1 else 0 END) AS "2_4_sales_count",
("0_2_sales_count") - ("2_4_sales_count") as "load_volume_diff_0_2_2_4",
(("0_2_sales_count" - "2_4_weeks_load_volume")/case when "2_4_sales_count"::float =0 then 1 end) * 100 as "load_volume_diff_percent_0_2_2_4"
from sales
group by cust_name;
據推測,問題出在這一行:
(("0_2_sales_count" -"2_4_weeks_load_volume") / "2_4_sales_count"::float) * 100 as "load_volume_diff_percent_0_2_2_4"
我會這樣寫:
(("0_2_sales_count" - "2_4_weeks_load_volume") * 100.0 / nullif("2_4_sales_count", 0.0) as "load_volume_diff_percent_0_2_2_4"
除以零的最簡單解決方案是nullif()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.