我有2个表的样本:
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子句中使用Subselect。
答案 0 :(得分:7)
注意:BigQuery不允许在select子句中使用Subselect。
支持支持标准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
同时,如果您绑定了Legacy 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