【问题标题】:Query Optimisation: SUMIF and CASE WHEN查询优化:SUMIF 和 CASE WHEN
【发布时间】:2021-03-15 09:55:48
【问题描述】:
我正在编写查询以获取奖励广告的数量。为此,我必须汇总 event_name 中的“rewarded_ad”事件。然后,我在第二条语句中清理空值。所以目前,我的查询包括一个子查询。但是,有没有办法在不使用子查询的情况下做到这一点?我希望优化这个过程。
我的子查询包括:
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
感谢任何帮助。提前谢谢你。
【问题讨论】:
标签:
sql
optimization
google-bigquery
subquery
case
【解决方案1】:
也许是 IFNULL?
IFNULL(SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)), 0) AS rv_count
【解决方案2】:
你可以替换:
SUM(IF(LOWER(event_name)= 'rewarded_ad', 1,0)) AS rewarded_ad
与:
COUNTIF(LOWER(event_name) = 'rewarded_ad') AS rewarded_ad
这永远不会返回NULL,因为COUNT()永远不会返回NULL。因此,这应该没有子查询来回答您的问题。但是如果子查询没有返回任何行,就会出现NULL 值。要处理这个问题,请使用COALESCE():
COALESCE(COUNTIF(LOWER(event_name) = 'rewarded_ad'), 0) AS rewarded_ad