json - postgresql中group by的嵌套json聚合行

标签 json postgresql group-by aggregate

我有一个 postgresql 表

alok=# select * from people;
  name   | country |  city   
---------+---------+---------
 alok    | india   | delhi
 ram     | india   | kolkata
 shyam   | india   | kanpur
 krishna | us      | newyork
 ajit    | india   | delhi
 sami    | india   | delhi
 mohamad | india   | kolkata
(7 rows)

可以通过以下方式生成

create table people(name varchar, country varchar, city varchar);

insert into people values('alok', 'india', 'delhi');
insert into people values('ram', 'india', 'kolkata');
insert into people values('shyam', 'india', 'kanpur');
insert into people values('krishna', 'us', 'newyork');
insert into people values('ajit', 'india', 'delhi');
insert into people values('sami', 'india', 'delhi');
insert into people values('mohamad', 'india', 'kolkata');

我想生成国家和城市的聚合名称,例如

country |                name                
---------+------------------------------------
 india   | {"delhi":["alok", "ajit", "sami"], "kolkata":["ram", "mohamad"], "kanpur":["shyam"]}
 us      | {"newyork":["krishna"]}

最佳答案

demo:db<>fiddle

SELECT 
    country,
    json_object_agg(city, agg_names)
FROM (
    SELECT
        country,
        city, 
        json_agg(name) AS agg_names
    FROM
        people
    GROUP BY country, city
) s
GROUP BY country
  1. 城市对名称进行分组。要将name放入一个JSON数组中,您可以使用聚合函数json_agg()
  2. 国家/地区对此结果进行分组。要获得预期的输出,您需要使用聚合函数 json_object_agg(),它从 cityname 数组创建键/对值

documentation

关于json - postgresql中group by的嵌套json聚合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56847585/

相关文章:

json - Kibana 中的 MongoDB 查询

postgresql - 更改日期格式时给出错误结果

python - 将 groupby 或 datetime 对象转换/分割并转置为数据帧

javascript - 生成自定义 JSON 数组

C++ JSON 序列化,Proto-buf 风格

java - 如何在 java 中将 json 作为 Rest Post Web 服务的查询参数传递

postgresql - Phantom Postgres 表存在但不能删除?

postgresql - 如何撤销对用户 postgres 的复制访问权限?

MySQL:具有多个 GROUP BY 的 COUNT

mysql - 使用不同和/或分组依据来过滤选择