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()
: