sql - BigQuery : Use COUNT as LIMIT

标签 sql google-bigquery

我想从 mytable1 中选择所有内容,并将其与 mytable2 中同样多的行组合起来。在我的例子中,mytable1 的行数始终少于 mytable2,并且我希望最终表是每个表中 50-50 条数据的混合。虽然我觉得下面的代码在逻辑上表达了我想要的内容,但它在语法上不起作用:

Syntax error: Expected "@" or integer literal or keyword CAST but got "(" at [3:1]

(SELECT * FROM `mytable1`)
UNION ALL (
    SELECT * FROM `mytable2`
    LIMIT (SELECT COUNT(*) FROM`mytable1`)
)

在bigquery中使用标准SQL

最佳答案

文档指出 LIMIT 子句仅接受文字或参数值。我认为您可以ROW_NUMBER()第二个表中的行并基于此进行限制:

SELECT col1, col2, col3
FROM mytable1

UNION ALL

SELECT col1, col2, col3 
FROM (
    SELECT col1, col2, col3, ROW_NUMBER() OVER () AS rn
    FROM mytable2
) AS x
WHERE x.rn <= (SELECT COUNT(*) FROM mytable1)

关于sql - BigQuery : Use COUNT as LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733149/

相关文章:

mysql - 基于三个表的层次结构

sql - 为什么参数的顺序在 SQL 中很重要

c# - SQL Server 2008 错误 - XML 分析 : document parsing required too much memory

php - MySQL 条件选择 2 个字段中的 1 个,然后按 2 个字段的组合分组

python-3.x - 如何从 Google BigQuery 行迭代器对象返回字符串?

javascript - Google-Big Query with JavaScript

google-bigquery - 从 UI 运行加载作业时,Big-query 现在会自动将长十进制值转换为数字

sql - 我可以在 Postgres 中使用来自其他表的聚合数据更新表中的多个字段吗?

google-bigquery - 使用命令行 BQ 命令从 JSON 文件导入数据时将空字符串 ("") 转换为 Double 数据类型

google-bigquery - Apache 光束 : Update BigQuery table row with BigQueryIO