bigquery抛出“被零除:0/0”错误

p5fdfcr1  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(355)

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

(division by zero: 0 / 0)

在这种情况下,如何应用iferror类型(x/y,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,
yftpprvb

yftpprvb1#

在这种情况下,您可以只使用安全除法函数
比如下面的例子

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

vbopmzt12#

此错误表示您有 User_ID 谁的一切 Name s是 NULL . 所以你们部门的分母是 0 ( COUNT(Name) 计数非- null 价值观 Name ),你得到的除法是 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
ccrfmcuu

ccrfmcuu3#

我倾向于使用 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;

相关问题