13

如何在 BigQuery 中过滤计数?

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

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

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

4

2 回答 2

16

对于 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    
于 2017-11-19T16:03:48.970 回答
6

使用case

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

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

于 2017-11-19T15:17:32.460 回答