2016-09-07 20 views
1

我有樣有2臺:的BigQuery不允許子選擇在SELECT子句

table POINT_STATUS: 
rank_point status 
9  excellent 
5  good 
3  bad 
0  fail 

table STUDENT_POINT: 
student  point 
student A 8 
student B 9 
student C 5 
student D 4 

如何在創建的BigQuery查詢學生(with point >= rank_point)獲取狀態?

注意: - BigQuery不允許子選擇在select子句中。

+0

重要的SO,您可以通過在投票表決下的已發佈答案左側的勾號標記接受的答案。請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235瞭解其重要性。還有更多......當某人回答你的問題時,你可以查看該怎麼做 - http://stackoverflow.com/help/someone-answers。 –

回答

5

注意:BigQuery不允許子選擇在select子句中。

DOES支持使用標準SQL - 見Enabling Standard SQL

WITH POINT_STATUS AS (
    SELECT 9 AS rank_point, 'excellent' AS status UNION ALL 
    SELECT 5 AS rank_point, 'good' AS status UNION ALL 
    SELECT 3 AS rank_point, 'bad' AS status UNION ALL 
    SELECT 0 AS rank_point, 'fail' AS status 
), 
STUDENT_POINT AS (
    SELECT 'student A' AS student, 8 AS point UNION ALL 
    SELECT 'student B' AS student, 9 AS point UNION ALL 
    SELECT 'student C' AS student, 5 AS point UNION ALL 
    SELECT 'student D' AS student, 4 AS point 
) 
SELECT 
    student, point, 
    (SELECT status 
    FROM POINT_STATUS 
    WHERE rank_point <= point 
    ORDER BY rank_point DESC 
    LIMIT 1 
) AS status 
FROM STUDENT_POINT 

同時,如果您綁定到傳統的SQL,請參見下面

SELECT student, point, status FROM (
    SELECT 
    student, point, status, 
    ROW_NUMBER() OVER(PARTITION BY student ORDER BY rank_point DESC) AS pos 
    FROM STUDENT_POINT 
    CROSS JOIN POINT_STATUS 
    WHERE point - rank_point >= 0 
) 
WHERE pos = 1 
+0

用戶在另一個帳戶下發布了這是他們問題的解決方案,只是未來Google員工的FYI,因爲這個帖子很可能會很快被刪除 – Draken