【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 2017-05-30
        • 2014-11-29
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多