在 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) 中生成序列/范围/数组,其中最小值和最大值取自另一个表的主要内容,如果未能解决你的问题,请参考以下文章
Google Data Studio:如何使用自定义 Big Query 查询创建时间序列图表
Google Big Query 标准 SQL,在 SELECT 语句中添加一列