Bigquery - UNION ALL 具有不同参数的相同查询

Posted

技术标签:

【中文标题】Bigquery - UNION ALL 具有不同参数的相同查询【英文标题】:Bigquery - UNION ALL same query with different parameters 【发布时间】:2020-10-27 11:18:37 【问题描述】:

我有一个非常大的查询,我想联合所有相同的查询,但更改两个不同的参数。因此,为了使查询更具可读性,我想避免使用 UNION ALL。这是一个简短的例子(废话,但它给出了一个想法) 我所拥有的:

SELECT DISTINCT Name,'7 days' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE())
UNION ALL
SELECT DISTINCT Name, '14 DAYS' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY) AND CURRENT_DATE())

所以重点是避免这种联合并使其可扩展以适应更多联合,只需更改间隔而不创建数百行代码。

【问题讨论】:

【参考方案1】:

你可以这样写:

SELECT DISTINCT Name, CONCAT(d, ' days')
FROM T JOIN
     (UNNEST(ARRAY[7, 14]) d
     ON DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL d DAY) AND CURRENT_DATE())

这个查询基本上是无意义的,因为它只是在每个时间段重复最近的名字。

但关键的想法是 UNNEST() 一个包含您想要的值的数组,然后使用 JOIN 而不是 WHERE

【讨论】:

以上是关于Bigquery - UNION ALL 具有不同参数的相同查询的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中的 UNION ALL 或 CONCATENATE 数据集

是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?

Bigquery 使用 Union All 和通配符删除查询

SQL Server UNION ALL 合并连接(连接)太慢

UNION ALL 参数化查询

union和union all有什么不同?