繁体   English   中英

bigQuery 抛出“除以零:0 / 0”错误

[英]bigQuery throws “division by zero: 0 / 0” error

我正在使用 bigquery 按列值的频率计算百分比。 但是,某些值可能为零,因此查询肯定会返回错误

(division by zero: 0 / 0)

在这种情况下如何应用一种 IFERROR(x/y,null) ? 所以查询将返回 null 值作为结果而不是错误?

SELECT 
    User_ID, 
   ROUND(SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END) / COUNT(Name) * 100 ,1) AS Percentage_of_MIKE,
    
FROM
  table
GROUP BY 
  User_ID

试过:

ROUND(SAFE_DIVIDE(SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END) / COUNT(Name) * 100 ,1)) AS Percentage_of_MIKE,

在这种情况下,您可以只使用SAFE_DIVIDE function

像下面的例子

ROUND(SAFE_DIVIDE(SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END), COUNT(Name) * 100) ,1) AS Percentage_of_MIKE

此错误表明您有User_ID ,其所有Name都是NULL 因此,除法的分母为0COUNT(Name)计算Name的非null值),并且除以0错误。

避免这种情况的一种简单方法是使用AVG()

ROUND(AVG(CASE 
    WHEN Name LIKE '%MIKE%' THEN 1.0
    WHEN Name IS NOT NULL THEN 0
END) * 100, 1) AS Percentage_of_MIKE

为此,我倾向于使用NULLIF() ,因为我喜欢使用除法运算符进行除法:

SELECT User_ID, 
       ROUND(COUNTIF(Name LIKE '%MIKE%') * 100 / NULLIF(COUNT(Name), 0), 1) AS Percentage_of_MIKE
FROM table
GROUP BY User_ID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM