简体   繁体   English

在雪花中展平嵌套数组和聚合

[英]Flatten Nested Array and Aggregate in Snowflake

My table column has nested arrays in a Snowflake database.我的表列在雪花数据库中有嵌套数组。 I want to perform some aggregations using SQL (Snowflake SQL).我想使用 SQL (Snowflake SQL) 执行一些聚合。

My table name is: DATA我的表名是:DATA

The PROJ column is of VARIANT data type. PROJ 列是 VARIANT 数据类型。 The nested arrays will not always be 3, and I demonstrated that in the DATA table.嵌套数组并不总是 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  |

First the nested array should be flattened, then Index is the first element of subarray and Value is the second element(array is 0-based):首先嵌套数组应该被展平,然后索引是子数组的第一个元素,值是第二个元素(数组从 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;

Query:询问:

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;

Output:输出:

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM