2012-07-25 122 views
5

我试图运行像怎么在这里回答了查询, SQL Selecting multiple sums?谷歌的BigQuery CASE功能

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 

但如果我尝试,我得到错误信息

"message": "Unrecognized function CASE". 

如果我尝试一个更简单的(从SQL教程),

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

我再拿到

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

我打算在黑暗中进行一次野蛮刺探,并假定SQL CASE函数总体上仅在BigQuery上不受支持,但真的希望我错了,因为它会导致巨大的差异在我想运行的报告查询上。

+0

看来,它确实不支持CASE子句https://开头开发商。 google.com/bigquery/docs/query-reference – Yaroslav 2012-07-25 10:01:51

+0

是的,我确实在那里检查,但他们提供版本号的事实让我想到有一个潜在的区域,我可以将我的版本交换到一个支持新版本的版本它。非常令人沮丧,它会让我需要的查询变得更容易。 – seaders 2012-07-25 10:32:12

+2

现在支持CASE,请参阅下面的 – 2013-11-22 01:56:41

回答

15

2013更新:BigQuery支援CASE:

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

'one' 
+1

感谢您为任何人提供更好的答案现在寻找那个。我不再使用BigQuery,但我可能会再次面向未来,上面添加的更多内容使其更加吸引人。 – seaders 2013-11-22 02:42:04

5

在BigQuery中执行此操作的方法是使用if(test,then,else)函数。 例如: SELECT sum(if (revision_id > 10, num_characters, 0)) FROM [publicdata:samples.wikipedia] 或类似于您的第二个查询:

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

+0

感谢乔丹,工作完美。 – seaders 2012-08-11 14:04:04

+0

2013更新:BigQuery支持大小写:SELECT CASE when x = 1 then'one'when x = 2 then'two'ELSE'more'END FROM(SELECT 1 AS x) – 2013-11-22 01:54:37