Mar*_*lin 3 sql google-bigquery bigquery-standard-sql
如何在BigQuery中过滤计数?
在Postgres中,我正在执行以下操作:
COUNT(*) FILTER (WHERE event_date>('{{ report_date }}'::date-INTERVAL '2 WEEK'))
Run Code Online (Sandbox Code Playgroud)
尽管这在BigQuery中不起作用。最好的选择是什么?我使用标准SQL。
使用case:
SUM(CASE WHEN event_date > '{{ report_date }}'::date-INTERVAL '2 WEEK' THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)
这是 Postgres 实现 ANSI 标准语法之前的“老式”方式FILTER。
对于BigQuery标准SQL,您可以使用COUNTIF和DATE_SUB函数,如下所示
COUNTIF(event_date > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK))
Run Code Online (Sandbox Code Playgroud)
您可以使用以下虚拟示例来测试/玩游戏
#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`
Run Code Online (Sandbox Code Playgroud)
可以预期的输出是
all_events qualified_events
3 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |