2012-07-25 7 views
5

Ich versuche, eine Abfrage wie zu laufen, was hier beantwortet wird, SQL Selecting multiple sums?Google BigQuery CASE-Funktion

SELECT SUM(CASE WHEN order_date >= '01/01/09' THEN quantity ELSE 0 END) AS items_sold_since_date, 
    SUM(quantity) AS items_sold_total, 
    product_ID 
FROM Sales 
GROUP BY product_ID 

Aber wenn ich versuche, dass, erhalte ich die Fehlermeldung

"message": "Unrecognized function CASE". 

Wenn ich versuche, ein viel einfacher (aus einem sQL-Tutorial),

SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END; 

ich

dann bekommen
"message": "searched case expression not supported at: 1.8 - 1.65". 

Ich bin einen wilden stab im Dunkel nehmen zu gehen und davon ausgehen, dass die SQL-CASE-Funktion insgesamt auf BigQuery nur nicht unterstützt, sondern hoffe wirklich, dass ich falsch bin, weil es einen riesigen wenig Unterschied macht basierte auf die Berichtsabfragen, die ich ausführen möchte.

+0

scheint in der Tat, dass es CASE-Klausel https nicht unterstützt: // Entwickler. google.com/bigquery/docs/query-reference – Yaroslav

+0

Ja, ich habe es überprüft, aber die Tatsache, dass sie Versionsnummern geben, hat mich zu der Annahme geführt, dass es möglicherweise einen Bereich gibt, in dem ich meine Version gegen eine neuere Version austauschen kann es. Sehr frustrierend, es würde die Abfragen, die ich brauche, viel einfacher machen. – seaders

+2

CASE wird jetzt unterstützt, siehe unten –

Antwort

15

2013 Update: BigQuery unterstützt CASE:

SELECT CASE WHEN x=1 THEN 'one' WHEN x=2 THEN 'two' ELSE 'more' END 
FROM (SELECT 1 AS x) 

'one' 
+1

Danke für die Aktualisierung mit der viel besseren Antwort für jedermann Ich suche das jetzt. Ich arbeite nicht mehr mit BigQuery, aber ich bin vielleicht wieder in der Zukunft und mehr Dinge wie oben, die es hinzufügt macht es umso ansprechender. – seaders

5

Der Weg, dies in BigQuery zu tun, ist die Verwendung der Funktion if (test, then, else). Zum Beispiel: SELECT sum(if (revision_id > 10, num_characters, 0)) FROM [publicdata:samples.wikipedia] oder ähnlich wie Ihre zweite Abfrage:

SELECT if (revision_id == 1, 'one', (if (revision_id == 2, 'two', 'more'))) FROM [publicdata:samples.wikipedia] limit 100

+0

Dank Jordanien, hat perfekt funktioniert. – seaders

+0

2013 Update: BigQuery unterstützt Fall: SELECT CASE WENN x = 1 DANN 'eins' WENN x = 2 DANN 'zwei' ELSE 'mehr' ENDE VON (SELECT 1 AS x) –