Grouping json array In Oracle Query
我有Oracle表:
1 2 3 4 | CREATE TABLE jsonarray_test (id VARCHAR2(50) PRIMARY KEY, json_array_str VARCHAR2(256), group_name VARCHAR2(50)); |
数据
1 2 3 4 5 | INSERT ALL INTO jsonarray_test (id, group_name, json_array_str) VALUES ('af1470c6-4883-454a-9cec-10cdd99c4446', 'sales', '["foo","bar"]') INTO jsonarray_test (id, group_name, json_array_str) VALUES ('f310a5e0-b881-42d0-a4af-b6d1e9064676', 'sales', '["foo1","bar"]') INTO jsonarray_test (id, group_name, json_array_str) VALUES ('688effbb-b665-4c58-b42a-be073823ec27', 'engineering', '["foo","bar1"]') SELECT 1 FROM DUAL; |
Oracle是否支持产生以下输出的查询? -重复数据删除并将所有分组到单个JSON数组中
1 2 | sales ["foo","foo1","bar"] engineering ["foo","bar1"] |
版本:Oracle Database 12c企业版12.2.0.1.0版-64位生产
从Oracle 12c开始,您可以使用
1 2 3 4 5 6 7 8 9 10 11 | SELECT group_name, json_arrayagg(val ORDER BY val) new_json_array_str FROM ( SELECT group_name, val FROM jsonarray_test j, json_table(j.json_array_str, '$[*]' COLUMNS(val varchar2(10) path '$')) t GROUP BY group_name, val ) x GROUP BY group_name |
请注意,由于某种原因,对于我来说似乎是个错误,您确实需要
DB Fiddle上的演示:
1 2 3 4 | GROUP_NAME | NEW_JSON_ARRAY_STR :---------- | :------------------- engineering | ["bar1","foo"] sales | ["bar","foo","foo1"] |