簡體   English   中英

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

[英]Does Big Query support custom sorting?

我試圖通過在 order by 子句中應用 case when 語句來對數據進行排序,但看起來 Big Query 不支持,即使它在其他 SQL 環境中運行良好。 有人可以分享您對此的看法。

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

我認為文檔很清楚:

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有類似的限制。

更新 (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
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM