The*_*yes 5 sql google-bigquery
在 BigQuery 中使用 WHERE 子句编写相关子查询时,会导致错误。LEFT OUTER JOIN 不能在没有条件是连接两侧的字段相等的情况下使用。
但是它在其他 SQL 引擎中工作,我不理解错误或如何重写查询。
相同类型的不同查询导致相同的错误。
SELECT
out.*
FROM
`august-monolith-205810.Assignment.students` AS out
WHERE
2 >= (
SELECT
COUNT(*)
FROM
`august-monolith-205810.Assignment.students` AS t1
WHERE
out.age < t1.age)
Run Code Online (Sandbox Code Playgroud)
报告最多比其他两个学生大的学生。
以下是 BigQuery 标准 SQL
#standardSQL
SELECT * EXCEPT(cnt)
FROM (
SELECT *, COUNT(1) OVER(ORDER BY age RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) cnt
FROM `august-monolith-205810.Assignment.students`
)
WHERE cnt BETWEEN 1 AND 2
Run Code Online (Sandbox Code Playgroud)
另一种效果较差,因此不推荐,但仍然是一种选择,那就是使用 CROSS JOIN 来模仿非等式 LEFT JOIN
#standardSQL
SELECT ANY_VALUE(out).*
FROM `august-monolith-205810.Assignment.students` AS out
CROSS JOIN `august-monolith-205810.Assignment.students` AS t1
WHERE out.age > t1.age
GROUP BY out.id
HAVING COUNT(t1.age) <= 2
Run Code Online (Sandbox Code Playgroud)