sql - 展平嵌套数组并在雪花中聚合

标签 sql snowflake-cloud-data-platform

我的表列在 Snowflake 数据库中有嵌套数组。我想使用 SQL (Snowflake SQL) 执行一些聚合。

我的表名是:DATA

PROJ 列是 VARIANT 数据类型。嵌套数组并不总是 3,我在 DATA 表中对此进行了演示。


| ID |             PROJ              | LOCATION |
|----|-------------------------------|----------|
| 1  |[[0, 4], [1, 30], [10, 20]]    |    S     |
| 2  |[[0, 2], [1, 20]]              |    S     |
| 3  |[[0, 8], [1, 10], [10, 100]]   |    S     |

Desired Output:

| Index | LOCATION |  Min | Max | Mean|
|-------|----------|------|-----|-----|
| 0     |    S     |  2   |  8  | 4.66|
| 1     |    S     |  10  |  30 | 20  |
| 10    |    S     |  20  |  100| 60  |

最佳答案

首先将嵌套数组展平,然后Index是子数组的第一个元素,Value是第二个元素(数组从0开始):

CREATE OR REPLACE TABLE DATA
AS
SELECT 1 AS ID, [[0, 4], [1, 30], [10, 20]]   AS PROJ UNION
SELECT 2 AS ID, [[0, 2], [1, 20]]             AS PROJ UNION
SELECT 3 AS ID, [[0, 8], [1, 10], [10, 100]]  AS PROJ;

查询:

SELECT s.VALUE[0]::INT AS Index,
       MIN(s.VALUE[1]::INT) AS MinValue,
       MAX(s.VALUE[1]::INT) AS MaxValue,
       AVG(s.VALUE[1]::INT) AS MeanValue
FROM DATA
,LATERAL FLATTEN(input=> PROJ) s
GROUP BY s.VALUE[0]::INT
ORDER BY Index;

输出:

enter image description here

关于sql - 展平嵌套数组并在雪花中聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72872414/

相关文章:

sql - 在 Snowflake 中选择常量和 * ?

MySQL SUM() 对不同列中的相同单元格进行求和

mysql - 嵌套查询的性能

r - 如何将 R 数据框写入 Snowflake 数据库表

sql - 从第一个有数据的查询中获取结果

snowflake-cloud-data-platform - 正则表达式 INSTR -雪花

mysql - 4张表的SQL查询: Very Complex?

sql - 排序行时优化 Hive GROUP BY

Mysql 查询 - round() 函数

snowflake-cloud-data-platform - 如何在 Snowflake 过程中使用多线程处理大数据