【问题标题】:COUNT(*) FILTER (WHERE... In BigQueryCOUNT(*) 过滤器(在哪里......在 BigQuery 中
【发布时间】:2018-05-02 20:53:46
【问题描述】:

如何在 BigQuery 中过滤计数?

在 Postgres 中,我正在做类似的事情:

COUNT(*) FILTER (WHERE event_date>('{{ report_date }}'::date-INTERVAL '2 WEEK'))

虽然这在 BigQuery 中不起作用。什么不是最好的选择?我使用标准 SQL。

【问题讨论】:

    标签: sql google-bigquery bigquery-standard-sql


    【解决方案1】:

    使用case:

    SUM(CASE WHEN event_date > '{{ report_date }}'::date-INTERVAL '2 WEEK' THEN 1 ELSE 0 END)
    

    这是“老式”的方式,在 Postgres 实现 ANSI 标准 FILTER 语法之前。

    【讨论】:

      【解决方案2】:

      对于 BigQuery 标准 SQL,您可以使用以下 COUNTIFDATE_SUB 函数

      COUNTIF(event_date > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK))  
      

      您可以使用下面的虚拟示例测试/玩上面的内容

      #standardSQL
      WITH `project.dataset.yourTable` AS (
        SELECT 1 AS event_id, DATE '2017-11-19' AS event_date UNION ALL
        SELECT 2, DATE '2017-11-18' UNION ALL
        SELECT 3, DATE '2017-10-15' 
      )
      SELECT 
        COUNT(*) AS all_events,
        COUNTIF(event_date > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK)) AS qualified_events 
      FROM `project.dataset.yourTable`   
      

      预期的输出是

      all_events  qualified_events     
      3           2    
      

      【讨论】:

        猜你喜欢
        • 2018-04-29
        • 2013-01-23
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 2016-07-30
        • 2023-03-28
        相关资源
        最近更新 更多