问题描述
我正在尝试编写一个 case when 语句,当连接 =“Snapchat”时将国家/地区名称设置为“美国”。但我不断收到以下错误:
操作符 CASE 没有匹配的签名;所有 THEN/ELSE 参数都必须强制转换为通用类型,但发现:BOOL,STRING;实际参数类型 (WHEN THEN) ELSE: (BOOL BOOL) STRING at [4:5]
SELECT
date,app_name,case when lower(connection) like '%snapchat%' then country_name = 'United States' else country_name end as country,connection,platform,ad_type,cast(Ad_Requests as FLOAT64) as ad_requests,cast(Ad_Impressions as FLOAT64) as ad_impressions,cast(Ad_Revenue____ as FLOAT64) as ad_revenue
FROM `dataset`
有什么想法可以改进我的查询吗?提前致谢。
解决方法
你想要的样子:
SELECT . . .
(case when lower(connection) like '%snapchat%'
then 'United States'
else country_name
end) as country,
您的公式具有 then
子句的布尔结果。那会导致错误。但另外,它引用了可能不存在的列 country
。
您可以在下面使用
SELECT
. . .
IF(lower(connection) like '%snapchat%','United States',country_name) as country,. . .
FROM `dataset`