Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google BigQuery CASE function

I'm trying to run a query like what's answered here, SQL Selecting multiple sums?

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

But if I try that, I get the error message

"message": "Unrecognized function CASE".

If I try a much more simple (from an sql tutorial),

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

I then get

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

I'm going to take a wild stab in the dark and assume that the SQL CASE function is overall just not supported on BigQuery, but really hope that I'm wrong because it makes a huge bit of difference based on the report queries I want to run.

like image 590
seaders Avatar asked Jul 25 '12 09:07

seaders


2 Answers

2013 update: BigQuery supports CASE:

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

'one'
like image 98
Felipe Hoffa Avatar answered Oct 13 '22 02:10

Felipe Hoffa


The way to do this in BigQuery is to use the if(test,then,else) function. For example: SELECT sum(if (revision_id > 10, num_characters, 0)) FROM [publicdata:samples.wikipedia] or similar to your second query:

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

like image 25
Jordan Tigani Avatar answered Oct 13 '22 02:10

Jordan Tigani