2017-11-19 2 views
1

Wie kann ich in einer Zählung in BigQuery filternCOUNT (*) FILTER (WHERE ... In BigQuery

In Postgres ich so etwas tun war:

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

Obwohl dies nicht in funktioniert . BigQuery What't die beste Alternative I Standard-SQL verwenden

Antwort

2

Für BigQuery Standard-SQL können Sie COUNTIF und DATE_SUB Funktionen wie unten

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

verwenden Sie können mit Test/spielen unter Dummy-Beispiel oben mit

#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` 

Der Ausgang als würde man erwarten ist

all_events qualified_events  
3   2  
0

Verwendung case:.

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

Dies ist der "altmodische" Weg, bevor Postgres den ANSI-Standard FILTER Syntax implementiert hat.

Verwandte Themen