17

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.

4
  • Seems that indeed it not supports CASE clause developers.google.com/bigquery/docs/query-reference Commented Jul 25, 2012 at 10:01
  • Yeah, I did check there alright, but the fact that they give version numbers led me to thinking that there was potentially an area where I could swap my version to a newer one that supports it. Very frustrating, it'd make the queries I need much easier. Commented Jul 25, 2012 at 10:32
  • 2
    CASE is supported now, see below Commented Nov 22, 2013 at 1:56
  • CASE is supported BUT just as 'searched case' and not 'simple case' expression (as of 24th Feb 2016). Just in case somebody stumbles upon and is wondering, took me too long to figure it out Commented Feb 24, 2016 at 15:55

2 Answers 2

41

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'
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for updating with the much better answer for anyone looking for that now. I'm not working with BigQuery any more, but I may be again in the future and the more things like above that it's adding makes it all the more appealing.
What's the standard SQL version?
6

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

1 Comment

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)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.