COUNT(*) FILTER (WHERE... 在 BigQuery 中
COUNT(*) FILTER (WHERE... In BigQuery
如何在 BigQuery 中过滤计数?
在 Postgres 中我做了类似的事情:
COUNT(*) FILTER (WHERE event_date>('{{ report_date }}'::date-INTERVAL '2 WEEK'))
尽管这在 BigQuery 中不起作用。什么不是最好的选择?我使用标准 SQL.
使用case
:
SUM(CASE WHEN event_date > '{{ report_date }}'::date-INTERVAL '2 WEEK' THEN 1 ELSE 0 END)
这是 "old-fashioned" 方式,在 Postgres 实现 ANSI 标准 FILTER
语法之前。
对于 BigQuery Standard SQL,您可以使用 COUNTIF and DATE_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
如何在 BigQuery 中过滤计数?
在 Postgres 中我做了类似的事情:
COUNT(*) FILTER (WHERE event_date>('{{ report_date }}'::date-INTERVAL '2 WEEK'))
尽管这在 BigQuery 中不起作用。什么不是最好的选择?我使用标准 SQL.
使用case
:
SUM(CASE WHEN event_date > '{{ report_date }}'::date-INTERVAL '2 WEEK' THEN 1 ELSE 0 END)
这是 "old-fashioned" 方式,在 Postgres 实现 ANSI 标准 FILTER
语法之前。
对于 BigQuery Standard SQL,您可以使用 COUNTIF and DATE_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