gpt4 book ai didi

arrays - Postgresql将json数组选择成行和单个文本

转载 作者:行者123 更新时间:2023-11-29 12:02:51 25 4
gpt4 key购买 nike

我有查询要从这样的表中获取结果:

SELECT  test_id, content::json->'scenario'
FROM test

我得到了这些结果,场景列中有对象数组:

test_id | scenario
29 | [{"name":"OpenSignal", "task":[{"name":"speedtest"}]}, {"name":"ITest", "task":[{"name":"speedtest"}]}, {"name":"EqualOne", "task":[{"name":"flashtest"}, {"name":"web"}, {"name":"video"}]}]
30 | [{"name":"Speedtest", "task":[{"name":"speedtest"}]}, {"name":"ITest", "task":[{"name":"speedtest"}]}, {"name":"EqualOne", "task":[{"name":"flashtest"}, {"name":"web"}, {"name":"video"}]}]

对象结构是这样的:

[{
"name": "OpenSignal",
"task": [{
"name": "speedtest"
}]
}, {
"name": "ITest",
"task": [{
"name": "speedtest"
}]
}, {
"name": "EqualOne",
"task": [{
"name": "flashtest"
}, {
"name": "web"
}, {
"name": "video"
}]
}]

我怎样才能得到这样的结果:

test_id | scenario
29 | Opensignal-speedtest
29 | ITest-speedtest
29 | EqualOne-flashtest
29 | EqualOne-web
29 | EqualOne-video
30 | Opensignal-speedtest
30 | ITest-speedtest
30 | EqualOne-flashtest
30 | EqualOne-web
30 | EqualOne-video

test_id | scenarios
29 | OpenSignal-speedtest,ITest-speedtest,EqualOne-flashtest, EqualOne-web,EqualOne-video
30 | Speedtest-speedtest,ITest-speedtest,EqualOne-flashtest,EqualOne-web,EqualOne-video

先谢谢兄弟们

最佳答案

对于您的第一个查询,您可以这样做:

SELECT test_id, CONCAT(sub.element->'name', '-', json_array_elements(sub.element->'task')->'name') as scenario
FROM
(SELECT test_id, json_array_elements(content::json) as element
FROM test) as sub;

我使用子查询从您的原始 json 中获取元素,然后用短划线将名称与每个任务名称连接起来。

然后,为了轻松地将它们按 id 分开,我使用 string_agg 函数将其包装在另一个子查询中:

SELECT test_id, 
string_agg(task, ',')
FROM(
SELECT test_id, CONCAT(sub.element->'name', '-', json_array_elements(sub.element->'task')->'name') as task
FROM
(SELECT test_id, json_array_elements(content::json) as element
FROM test) as sub
)as tasks
GROUP BY test_id

抱歉,如果看起来有点乱,这里有一个 sqlfiddle 链接,您可以使用。 http://sqlfiddle.com/#!17/fcb27/38

关于arrays - Postgresql将json数组选择成行和单个文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47220253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com