{
object_id: 1,
text: [
en: { name: xxx, desc: xxx },
pl: { name: xxx, desc: xxx }
]
}
我的表看起来像这样
id, name, desc, object_id, language
并且一些数据如下所示:
1, xxx, xxx, 1, en
2, xxx, xxx, 2, pl
3, xxx, xxx, 1, pl
4, xxx, xxx, 2, de
我想聚合响应中文本字段中具有相同object_id的人的名称和desc
我正在制作postgres 9.3
答案 0 :(得分:1)
该问题包含不准确之处:预期结果不是有效的json,表格未正确定义。
假设表定义为:
link
查询:
var vis = d3.select(element[0]).select(".pie_chart").append("svg")...
Postgres 9.3解决方案
Postgres 9.4带有强大的功能create table the_table
(
id integer,
some_name text, -- do not use 'name' for column name
descr text, -- 'desc' is invalid column name
object_id integer,
lang text -- do not use 'language' for column name
)
。
用你自己的函数替换它是不可能的,因为plpgsql不允许select json_agg(json_build_object('object_id', object_id, 'text', js))
from (
select object_id, json_agg(js) js
from (
select
object_id,
lang,
json_build_object(
lang,
json_object(array['name', some_name, 'desc', descr])
) js
from the_table
order by lang
) alias
group by 1
) alias
作为参数。
出于Postgres 9.3的目的,我们将使用三个函数来操作文本类型(而不是json),以及最简单的聚合函数json_build_object(variadic "any")
(这个解决方案已经足够了,虽然更优雅的是定义我们自己的聚合函数)。
variadic "any"
9.3版本中的查询:
string_agg