我正在尝试在表中生成PSQL查询,该表具有id,description和session_unique_id等值。我想选择像一组json数组的数据,每个数组都有相同session_unique_id的每一行的json数据。
我期待这样的结果。
[
[
{"id":"1","description":"test","session_unique_id":"123"},
{"id":"2","description":"test","session_unique_id":"123"},
{"id":"3","description":"test","session_unique_id":"123"}
],
[
{"id":"4","description":"test","session_unique_id":"124"},
{"id":"5","description":"test","session_unique_id":"124"},
{"id":"6","description":"test","session_unique_id":"124"}],
[
{"id":"7","description":"test","session_unique_id":"125"},
{"id":"8","description":"test","session_unique_id":"125"},
{"id":"9","description":"test","session_unique_id":"125"}
]
]
答案 0 :(得分:1)
使用to_jsonb()
将行转换为jsonb和jsonb_agg()
两次以聚合嵌套数组中的数据:
select jsonb_agg(unique_id order by session_unique_id)
from (
select session_unique_id, jsonb_agg(to_jsonb(t)) as unique_id
from my_table t
group by session_unique_id
) t;
在此测试:SqlFiddle.
答案 1 :(得分:0)
如果您使用的是Oracle 12.2,则可以本机执行:
WITH yourtable
AS (SELECT '1' id, 'test' description, '123' session_unique_id FROM DUAL
UNION ALL
SELECT '2' id, 'test' description, '123' session_unique_id FROM DUAL
UNION ALL
SELECT '3' id, 'test' description, '123' session_unique_id FROM DUAL
UNION ALL
SELECT '4' id, 'test' description, '124' session_unique_id FROM DUAL
UNION ALL
SELECT '5' id, 'test' description, '124' session_unique_id FROM DUAL
UNION ALL
SELECT '6' id, 'test' description, '124' session_unique_id FROM DUAL
UNION ALL
SELECT '7' id, 'test' description, '125' session_unique_id FROM DUAL
UNION ALL
SELECT '8' id, 'test' description, '125' session_unique_id FROM DUAL
UNION ALL
SELECT '9' id, 'test' description, '125' session_unique_id FROM DUAL)
SELECT json_arrayagg (obj) yourFinalJSON
FROM (SELECT json_arrayagg (obj) obj
FROM (SELECT json_object ('id' value id,
'description' value description,
'session_unique_id' value session_unique_id
) obj
FROM yourtable) t
group by json_value(t.obj,'$.session_unique_id'))t
只需用您的表替换内联视图。