我是Presto SQL的新手,我被一个问题缠住了,我真的需要你的帮助.

我有一个带有"Info"字段的表:

Date                  Info
2021-01-01            {"user_id":"12345", "order_id": "[333222, 444555, 777888]"}
2021-01-02            {"user_id":"67891", "order_id": "[948263]"}
2021-01-03            {"user_id":"93846", "order_id": "[937846, 889213, 886534, 991827]"}
2021-01-04            {"user_id":"63792", "order_id": "[]"}
2021-01-05            {"user_id":"04937", "order_id": "[837462, 837213]"}

我想提取所有的order_id并将它们转换为行,输出可能如下所示:

Date                  order_id
2021-01-01            333222
2021-01-01            444555
2021-01-01            777888
2021-01-02            948263
2021-01-03            937846
...
2021-01-05            837213

我的疑问是:

SELECT Date, Info['ORDER_ID']
FROM test_table

我try 了上面的查询,但它只能以数组形式返回orderid.有人知道怎么做吗?非常感谢您,感谢您的帮助!

推荐答案

文档是你的朋友.您对json functionsunnest感兴趣(在代码样例中使用了简明版本的语法).除此之外,还有一个诀窍--"[333222, 444555, 777888]"是一个双编码的json数组,因此您需要对其进行两次解析(第一次由json_extract_scalar完成):

-- sample data
WITH dataset (Date, Info) AS (
   VALUES ('2021-01-01', '{"user_id":"12345", "order_id": "[333222, 444555, 777888]"}')
)

-- query
select Date, order_id
from dataset,
unnest (cast(json_parse(json_extract_scalar(Info, '$.order_id')) as array(integer))) as t(order_id);

输出:

Date order_id
2021-01-01 333222
2021-01-01 444555
2021-01-01 777888

UPD

在 comments 中回答您的问题:

-- sample data
WITH dataset (Date, Info) AS (
   VALUES ('2021-01-01', map(array['user_id', 'order_id'], array['12345', '[333222, 444555, 777888]']))
)

-- query
select Date, order_id
from dataset,
    unnest (cast(json_parse(Info['order_id']) as array(integer))) as t(order_id);

Sql相关问答推荐

R中对Arrow duckdb工作流的SQL查询

返回包含列和包含其他列的列表的自定义查询

不同表达方式时的大小写

收到%1、%2或%2邮箱的唯一客户

SQL:如何查找聚合满足条件的连续日期

如何计算给定日期前三个月的值以及月初数据?

了解多个分组集

在同一列上迭代时计算持续时间

将 json 列键映射到第二个表中的匹配列值

在 PostgreSQL 中,如何让多个判断约束引用相同的值数组?

PostgreSQL 中将数据从 JSONB 类型转换为 Array 类型

SQL 函数 DIFFERENCE 返回有趣的分数

强制 SQL 始终通过 R 从视图中返回至少一行

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

如何获得上个月和下个月之间的销售额差异

存储过程 - 动态 SQL 中不同列值的计数

Postgres:表的累积视图

SQLite 中的过滤运行总和视图

超过100名员工的连续行

根据条件列出不同的值