Big Query是否支持自定义排序?

时间:2015-08-13 01:31:47

标签: sql bigdata google-bigquery

我试图通过在order by子句中应用case when语句对数据进行排序,但看起来Big Query不支持,即使它在其他SQL环境中工作正常。有人可以分享你对此的看法。感谢。

3 个答案:

答案 0 :(得分:5)

select x 
from (
  select x ,
  case when x = 'a' then 'z' else x end as y
  from 
    (select 'a' as x),
    (select 'b' as x),
    (select 'c' as x),
    (select 'd' as x)
  )
order by y desc

答案 1 :(得分:1)

我认为文档很清楚:

  

ORDER BY子句

     

... ORDER BY field1 | alias1 [DESC | ASC],field2 | alias2 [DESC | ASC] ...

     

ORDER BY子句按升序或者对查询结果进行排序   一个或多个字段的降序。使用DESC(降序)或ASC   (升序)指定排序方向。 ASC是默认值。

     

您可以按字段名称或SELECT子句中的别名进行排序。至   按多个字段或别名排序,以逗号分隔输入   名单。结果按字段顺序排序   列出。

因此,BigQuery不允许ORDER BY中的表达式。但是,您可以在SELECT中包含表达式,然后通过别名引用它。因此,BigQuery支持"自定义排序",但仅限于SELECT中的表达式。

有趣的是,Hive有类似的限制。

答案 2 :(得分:0)

更新 (2021) - Bigquery 现在支持 ORDER BY 表达式,例如


    SELECT event_type, COUNT(*) as event_count
    FROM events
    GROUP BY event
    ORDER BY (
        CASE WHEN event='generated' THEN 1
             WHEN event='sent' THEN 2
             WHEN event='paid' THEN 3
        ELSE 4
    END
)