首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用UNNEST或任何其他函数将数组扁平化?

如何使用UNNEST或任何其他函数将数组扁平化?
EN

Stack Overflow用户
提问于 2016-10-02 00:33:14
回答 3查看 31.9K关注 0票数 16

假设我得到一个带一个字段的临时表是一个数组,如何将它转换为多行?

使用PostgreSQL,这可以通过UNNEST http://sqlfiddle.com/#!15/21673/19实现。

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS arr)

SELECT UNNEST(arr) FROM x

在BigQuery中运行相同的查询,在3:8处运行语法错误:意外关键字UNNEST

似乎在BigQuery中,UNNEST只能放在FROM子句之后,

然后我尝试了这些:

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS arr)

SELECT * FROM UNNEST(x)

这一条说UNNEST不能在3:22的表上应用;或者这个

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS row)

SELECT * FROM UNNEST(x.arr)

在3:22不能在表: x.arr上应用UNNEST

顺便说一下,当前的临时表x如下所示:

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,2] AS row)

SELECT * FROM x
EOF

+--------------+
|     row      |
+--------------+
| [u'1', u'2'] |
+--------------+

当我期望把它变成一排排的价值时:

代码语言:javascript
复制
+-----+
| row |
+-----+
|   1 |
|   2 |
+-----+

https://cloud.google.com/bigquery/sql-reference/arrays

EN

回答 3

Stack Overflow用户

发布于 2016-10-02 03:37:02

还有另一个版本--涉及“显式”UNNEST。

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT arr_item FROM x, UNNEST(arr) as arr_item
票数 18
EN

Stack Overflow用户

发布于 2016-10-02 01:05:51

您可以通过将arr的元素与x的每一行进行交叉连接,即

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT arr FROM x, x.arr

或者您可以更明确地将它写成交叉连接,而不是使用逗号。

代码语言:javascript
复制
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT arr FROM x CROSS JOIN x.arr
票数 10
EN

Stack Overflow用户

发布于 2021-05-06 08:12:41

如果要按数组创建普通表,可以在FROM语句中使用UNNEST。

代码语言:javascript
复制
WITH x AS (
  SELECT
    *
  FROM
    UNNEST([1,2,3]) as num
)

select * from x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39812791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档