我正在使用 bigquery 按列值的频率计算百分比。但是,某些值可能为零,因此查询肯定会返回错误
(division by zero: 0 / 0)
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何应用 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
Run Code Online (Sandbox Code Playgroud)
尝试过:
ROUND(SAFE_DIVIDE(SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END) / COUNT(Name) * 100 ,1)) AS Percentage_of_MIKE,
Run Code Online (Sandbox Code Playgroud) 我的查询应该根据列的最大值返回列名称。我尝试使用 CASE WHEN 来解决这个问题。但不知怎的,这个错误发生了,可能是因为我返回列的名称而不是列本身的值:
No matching signature for operator CASE; all THEN/ELSE arguments must be coercible to a common type but found: INT64, STRING; actual argument types (WHEN THEN) ELSE: (BOOL STRING) (BOOL INT64) INT64 at [3:5]
Run Code Online (Sandbox Code Playgroud)
我的代码是:
SELECT
ID,
CASE
WHEN col1 >= col2 AND col1 >= col3 AND col1 >= col4 AND col1 >= col5 THEN 'col1 '
WHEN col2 >= col1 AND col2 >= col3 AND col2 >= col4 AND col2 >= col5 THEN 'col2 '
ELSE …Run Code Online (Sandbox Code Playgroud)