Sql “bigQuery抛出”;除零:0/0“;错误
我正在使用bigquery按列值的频率计算百分比。但是,有些值可能为零,因此查询肯定会返回错误Sql “bigQuery抛出”;除零:0/0“;错误,sql,select,group-by,count,google-bigquery,Sql,Select,Group By,Count,Google Bigquery,我正在使用bigquery按列值的频率计算百分比。但是,有些值可能为零,因此查询肯定会返回错误 (division by zero: 0 / 0) 在这种情况下,如何应用类型错误(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,
(division by zero: 0 / 0)
在这种情况下,如何应用类型错误(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,
此错误表示您有
User\u ID
s,其所有Name
s均为NULL
。因此,您的除法分母是0
(COUNT(Name)
计算Name
的非null
值),并且您通过0
错误获得除法
避免这种情况的一种简单方法是使用AVG()
:
在这种情况下,您可以只使用函数
类似于下面的示例
ROUND(SAFE_DIVIDE(SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END), COUNT(Name) * 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;
在帖子中添加了我已经尝试过的内容(可以参考上面)。仍然会出错。您尝试的内容(至少是更新问题中的内容)与我的答案中的内容不同-请仔细检查。但很明显,您错误地应用了SAFE_DIVIDE函数。它有两个论点。在你如何应用它的过程中,你仍然有第一个参数,它是零除的!只需复制粘贴我的示例行并替换yours@swm:欢迎。我怀疑
AVG()
比其他解决方案更有效,因为它只涉及一个聚合函数(而其他解决方案需要2个)。
SELECT User_ID,
ROUND(COUNTIF(Name LIKE '%MIKE%') * 100 / NULLIF(COUNT(Name), 0), 1) AS Percentage_of_MIKE
FROM table
GROUP BY User_ID;