2012-07-25 22 views
5

Estoy tratando de ejecutar una consulta como lo que está respondida aquí, SQL Selecting multiple sums?Google BigQuery CASO función

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 

Pero si trato de que, me sale el mensaje de error

"message": "Unrecognized function CASE". 

Si trato una forma mucho más sencilla (de un tutorial de SQL),

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

entonces consigo

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

Voy a tomar una puñalada salvaje en la oscuridad y se supone que la función CASE de SQL es en general no admite en BigQuery, pero realmente espero que estoy equivocado, ya que hace un gran pedazo de diferencia basada en las consultas de informes que quiero ejecutar

+0

Parece que de hecho no es compatible con la cláusula CASE https: // desarrolladores. google.com/bigquery/docs/query-reference – Yaroslav

+0

Sí, lo revisé bien, pero el hecho de que me den números de versión me llevó a pensar que potencialmente había un área donde podía cambiar mi versión a una versión más reciente que admite eso. Muy frustrante, haría las consultas que necesito mucho más fáciles. – seaders

+2

CASE es compatible ahora, vea a continuación –

Respuesta

15

2013 actualización: BigQuery admite CASO:

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

'one' 
+1

Gracias por actualizar con la mejor respuesta para cualquier persona buscando eso ahora. Ya no estoy trabajando con BigQuery, pero es posible que vuelva a estarlo en el futuro y cuanto más cosas de las que mencioné arriba suman más atractivo. – seaders

5

La forma de hacer esto en BigQuery es usar la función if (prueba, luego, else). Por ejemplo: SELECT sum(if (revision_id > 10, num_characters, 0)) FROM [publicdata:samples.wikipedia] o similar a su segunda consulta:

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

+0

Gracias Jordan, funcionó a la perfección. – seaders

+0

actualización de 2013: BigQuery admite mayúsculas y minúsculas: SELECCIONE CASO CUANDO x = 1 DESPUÉS 'uno' CUANDO x = 2 DESPUÉS 'dos' EL 'más' FINAL DESDE (SELECCIONAR 1 AS x) –