Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询优化:SUMIF和CASE WHEN_Sql_Optimization_Google Bigquery_Subquery_Case - Fatal编程技术网

Sql 查询优化:SUMIF和CASE WHEN

Sql 查询优化:SUMIF和CASE WHEN,sql,optimization,google-bigquery,subquery,case,Sql,Optimization,Google Bigquery,Subquery,Case,我正在写一个查询来获取奖励广告的数量。为此,我必须从事件名称中对“奖励广告”事件进行求和。然后,我在第二条语句中清除空值。所以目前,我的查询包括一个子查询。但是,有没有一种不使用子查询的方法可以做到这一点?我希望优化这个过程 我的子查询包括: SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)) AS rewarded_ad CASE WHEN rewarded_ad IS NULL THEN 0 ELSE rewarded_ad END AS rv_c

我正在写一个查询来获取奖励广告的数量。为此,我必须从事件名称中对“奖励广告”事件进行求和。然后,我在第二条语句中清除空值。所以目前,我的查询包括一个子查询。但是,有没有一种不使用子查询的方法可以做到这一点?我希望优化这个过程

我的子查询包括:

SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)) AS rewarded_ad
CASE WHEN rewarded_ad IS NULL THEN 0 ELSE rewarded_ad END AS rv_count
外部查询包括:

SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)) AS rewarded_ad
CASE WHEN rewarded_ad IS NULL THEN 0 ELSE rewarded_ad END AS rv_count
感谢您的帮助。提前谢谢你。

可能是空的

IFNULL(SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)), 0) AS rv_count
您可以替换:

SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)) AS rewarded_ad
与:

这永远不会返回
NULL
,因为
COUNT()
永远不会返回
NULL
。因此,这应该回答您的问题,没有子查询。但是如果子查询不返回任何行,则会出现
NULL
值。要处理此问题,请使用
COALESCE()