Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从Presto中的JSON数组中提取值_Sql_Arrays_Json_Presto_Trino - Fatal编程技术网

Sql 从Presto中的JSON数组中提取值

Sql 从Presto中的JSON数组中提取值,sql,arrays,json,presto,trino,Sql,Arrays,Json,Presto,Trino,我有一个包含JSON数组的列,如下所示: {data=[{"name":"col1","min":0,"max":32,"avg":29}, {"name":"col2","min":1,"max":35,"avg":21}, {"name":"col3",&

我有一个包含JSON数组的列,如下所示:

{data=[{"name":"col1","min":0,"max":32,"avg":29},
{"name":"col2","min":1,"max":35,"avg":21},
{"name":"col3","min":4,"max":56,"avg":34}]}
我试图解析数组并根据条件提取特定值。比如说

“min”
的值,其中
“name”=“col1”
:0

“avg”
的值,其中
“name”=“col3”
:34


有人对此有解决方案吗?

您的JSON无效。它应该是
{“data”:[
不是
{data=[

如果JSON有效(您可以在子查询中轻松修复它),则提取数据,将其转换为数组(行)并使用CASE条件语句获取值。我在此处添加了max()聚合以删除空记录并获取单行中的所有必需值,您可以改为使用筛选器(例如
其中x.name='col1'
),具体取决于您的需要:

with mydata as (
select '{"data":[{"name":"col1","min":0,"max":32,"avg":29},
{"name":"col2","min":1,"max":35,"avg":21},
{"name":"col3","min":4,"max":56,"avg":34}]}' json
)

select max(case when x.name = 'col1' then x.min end) min_col1,
       max(case when x.name = 'col3' then x.avg end) avg_col3
from mydata
CROSS JOIN
    UNNEST(
            CAST(
                JSON_EXTRACT(json,'$.data')
                    as ARRAY(ROW(name VARCHAR, min INTEGER, max INTEGER, avg INTEGER))
                 )
          ) as x(name, min, max, avg) --column aliases
结果:

min_col1    avg_col3
0           34