查询优化:SUMIF 和 CASE WHEN
Query Optimisation: SUMIF and CASE WHEN
我正在编写一个查询来提取激励广告的数量。为此,我必须对 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
感谢任何帮助。提前谢谢你。
也许是 IFNULL?
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
与:
COUNTIF(LOWER(event_name) = 'rewarded_ad') AS rewarded_ad
这永远不会 return NULL
因为 COUNT()
永远不会 return NULL
。因此,这应该可以在没有子查询的情况下回答您的问题。但是,如果子查询 return 没有行,则可能会出现 NULL
值。要处理这个问题,请使用 COALESCE()
:
COALESCE(COUNTIF(LOWER(event_name) = 'rewarded_ad'), 0) AS rewarded_ad
我正在编写一个查询来提取激励广告的数量。为此,我必须对 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
感谢任何帮助。提前谢谢你。
也许是 IFNULL?
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
与:
COUNTIF(LOWER(event_name) = 'rewarded_ad') AS rewarded_ad
这永远不会 return NULL
因为 COUNT()
永远不会 return NULL
。因此,这应该可以在没有子查询的情况下回答您的问题。但是,如果子查询 return 没有行,则可能会出现 NULL
值。要处理这个问题,请使用 COALESCE()
:
COALESCE(COUNTIF(LOWER(event_name) = 'rewarded_ad'), 0) AS rewarded_ad