-- 从Presto中的JSON数组中提取值
-- presto 您的JSON无效。应该是{"data":[而不是{data = [
--如果JSON有效(您可以在子查询中轻松地修复它),则提取数据,将其转换为数组(行),并使用CASE条件语句获取值。我在这里添加了max()聚合以删除空记录并在单行中获取所有必需的值,您可以改用filter(例如where 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
Result:
min_col1 avg_col3
0 34