如何在Postgresql中按嵌套数组的重复值分组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Postgresql中按嵌套数组的重复值分组?相关的知识,希望对你有一定的参考价值。
先前的问题:How to group by duplicate value and nested the array Postgresql
使用此查询:
SELECT json_build_object(
'nama_perusahaan',"a"."nama_perusahaan",
'proyek', json_agg(
json_build_object(
'no_izin',"b"."no_izin",
'kode',c.kode,
'judul_kode',d.judul
)
)
)
FROM "t_pencabutan" "a"
LEFT JOIN "t_pencabutan_non" "b" ON "a"."id_pencabutan" = "b"."id_pencabutan"
LEFT JOIN "t_pencabutan_non_b" "c" ON "b"."no_izin" = "c"."no_izin"
LEFT JOIN "t_pencabutan_non_c" "d" ON "c"."id_proyek" = "d"."id_proyek"
GROUP BY "a"."nama_perusahaan"
结果显示如下:
"nama_perusahaan" : "JASA FERRIE",
"proyek" :
"no_izin" : "26A/E/IU/PMA/D8FD",
"kode" : "14302",
"judul_kode" : "IND"
"no_izin" : "26A/E/IU/PMA/D8FD",
"kode" : "13121",
"judul_kode" : "IND B"
如您所见,proyek
已嵌套,因此重复的proyek
将被分组。现在,我必须将no_izin
的相同值分组,这样它将像下面的预期结果一样将嵌套数组加倍。
"nama_perusahaan" : "JASA FERRIE",
"proyek" :
[
"no_izin" : "26A/E/IU/PMA/D8FD",
"kode_list":[
"kode" : "14302",
"judul_kode" : "IND"
,
"kode" : "13121",
"judul_kode" : "IND B"
]
]
我尝试使用此查询:
SELECT json_build_object(
'nama_perusahaan',"a"."nama_perusahaan",
'proyek', json_agg(
json_build_object(
'no_izin',"b"."no_izin",
'kode_list',json_agg(
json_build_object(
'kode',c.kode,
'judul_kode',d.judul
)
)
)
)
)
FROM "t_pencabutan" "a"
LEFT JOIN "t_pencabutan_non" "b" ON "a"."id_pencabutan" = "b"."id_pencabutan"
LEFT JOIN "t_pencabutan_non_b" "c" ON "b"."no_izin" = "c"."no_izin"
LEFT JOIN "t_pencabutan_non_c" "d" ON "c"."id_proyek" = "d"."id_proyek"
GROUP BY "a"."nama_perusahaan", b.no_izin
但是它没有用,它给出ERROR: aggregate function calls cannot be nested LINE 6:'kode_list',json_agg(
。我的代码可能会出什么问题?
答案
Disclaimer:对于我们来说,在不知道输入数据和表结构且必须处理未知语言的情况下构造查询非常困难。请尝试minimize您的其他问题(例如,对于您的问题,在将结果转换为JSON输出之前不需要先连接一些表并不重要),用英语创建示例(处理外语会代码看起来令人困惑,并导致拼写错误,因此,可能正确的想法无法将单词写错)和添加输入数据!这也将对您有帮助:您将更快地得到答案,并且代码错误的可能性要少得多(因为现在没有数据,我们无法创建可运行的示例来检查我们的想法)。
创建嵌套的JSON结构只能从最内层的嵌套对象到最外层的对象进行。因此,首先您必须在子查询中创建no_izin
数组。这可以用来创建proyek
对象:
SELECT
json_build_object(
'nama_perusahaan',"s"."nama_perusahaan",
'proyek', json_agg(no_izin)
)
)
FROM (
SELECT
"a"."nama_perusahaan",
json_build_object(
'no_izin',
"b"."no_izin",
'kode_list',
json_agg(
json_build_object(
'kode',c.kode,
'judul_kode',d.judul
)
)
) AS no_izin
FROM "t_pencabutan" "a"
LEFT JOIN "t_pencabutan_non" "b" ON "a"."id_pencabutan" = "b"."id_pencabutan"
LEFT JOIN "t_pencabutan_non_b" "c" ON "b"."no_izin" = "c"."no_izin"
LEFT JOIN "t_pencabutan_non_c" "d" ON "c"."id_proyek" = "d"."id_proyek"
GROUP BY "c"."id_proyek", "a"."nama_perusahaan"
) AS s
GROUP BY "s"."nama_perusahaan"
以上是关于如何在Postgresql中按嵌套数组的重复值分组?的主要内容,如果未能解决你的问题,请参考以下文章