在 SQL (Big Query) 中生成序列/范围/数组,其中最小值和最大值取自另一个表

Posted

技术标签:

【中文标题】在 SQL (Big Query) 中生成序列/范围/数组,其中最小值和最大值取自另一个表【英文标题】:Generate series / range / array in SQL (Big Query) with min and max values taken from another table 【发布时间】:2019-11-14 11:57:10 【问题描述】:

我需要生成表t1,每行有N个连续数字,从另一个表t中的最小值开始,到表t中的最大值结束。

如何使用 Big Query 标准 SQL 执行此操作?

为简单起见,假设t 是通过以下方式创建的(除非您事先不知道开始和结束值)

SELECT num FROM UNNEST(GENERATE_ARRAY(51, 650)) AS num;

不知何故我想做一些事情

SELECT num FROM UNNEST(GENERATE_ARRAY(MIN(t.num), MAX(t.num))) AS t1;

这个问题与 [1] 非常相似,不同之处在于系列的开始和结束取决于另一个表的最小值/最大值。

[1]How to generate series in BigQuery Standard SQL

【问题讨论】:

【参考方案1】:

您可以使用子查询:

SELECT tt
FROM (SELECT MIN(t.num) as min_num, MAX(t.num) as max_num
      FROM t
     ) t CROSS JOIN
     UNNEST(GENERATE_ARRAY(t.min_num, t.max_num)) tt

【讨论】:

感谢您的快速回复。如果我理解正确,您将语句命名为(SELECT MIN(t.num) as min_num, MAX(t.num) as max_num)t,但该语句也引用了 t。这不是自我介绍吗?如何将实际的表引用添加到 t 中?例如。 `datasetname.tablename` 在大查询中指向我的表 t 的部分? @Olsgaard 。 . .不,应该有一个FROM 子句。 像魅力一样工作!但是,在我的tt.* 中,我收到了一条错误消息Cannot dot-star in a INT64 field。所以我只是打电话给SELECT tt,它成功了 @SandroWiggers 。 . .我修好了。

以上是关于在 SQL (Big Query) 中生成序列/范围/数组,其中最小值和最大值取自另一个表的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个 sql 查询中生成多个时间序列?

Google Data Studio:如何使用自定义 Big Query 查询创建时间序列图表

Big Query 或 SQL 重塑数据

Google Big Query 标准 SQL,在 SELECT 语句中添加一列

如何在 Big Query 的标准 SQL 中使用通配符为特定分区查询多个表

Big Query - 使用旧版和普通 sql 时的用户数量不同