当前位置: 首页 > 面试题库 >

PostgreSQL的JSON聚合

拓拔俊德
2023-03-14
问题内容

我正在使用postgres 9.4,我有以下查询:

SELECT pid, code, name FROM activity, (
  SELECT code FROM project
) projects WHERE activity.pcode = projects.code;

返回以下关系:

pid | code |    name    
-------------------------------
  1 | p1   | activity1 
  1 | p3   | activity2
  2 | p1   | activity3
  2 | p2   | activity4
  2 | p3   | activity5

我正在尝试编写相同的查询,但这样我就获得了项目代码,并将活动名称作为相对于每个“ pid”的json数组

所以我正在寻找一个查询,该查询将返回如下内容:

pid | json    
------------------------------------------------------------------------------------
  1 | [{'code': 'p1', 'name': 'activity1'}, {'code': 'p3', 'name': 'activity2'}] 
  2 | [{'code': 'p1', 'name': 'activity3'}, {'code': 'p2', 'name': 'activity4'}, {'code': 'p3', 'name': 'activity5'}]

有任何想法吗?在此先感谢您的帮助

更新

这是我所做的(与Abelisto所说的很接近):

SELECT pid, json_agg(json_build_object('code', code, 'name', name)) AS agg                                                                                                                                    
FROM activity JOIN (                                                                                                                                                                                          
  SELECT code FROM project                                                                                                                                                                                    
) AS p ON p.code=activity.pcode                                                                                                                                                                               
GROUP BY pid;

问题答案:
select
  pid,
  json_agg(json_build_object('code',code,'name',name))
from
  ...
group by
  pid


 类似资料:
  • 问题内容: 我想使用Postgres 9.4 在json列上创建一个索引,该索引将在搜索列中的特定键时使用。 例如,我有一个带有json列“ animals”的“农场”表。 animals列具有通用格式的json对象: 我已经尝试了多个索引(分别): 我想运行如下查询: 并让该查询使用索引。 当我运行此查询时: 那么(1)索引就可以了,但是我无法获得任何索引来解决不平等问题。 这样的索引可能吗?

  • 问题内容: 我在MySQL上有两个表,我想知道在MySQL上是否有任何聚合函数,如postgreSQL的array_agg()。 表1的属性只有8条记录表2的记录捕获了该属性,因此对于同一属性,有时可以是1或n次,我得到了这个Qry: 如果我使用GROUP BY部分,则会得到以下信息: 丢失了除users_admin_id的第一个值以外的任何其他数据。我知道我可以通过postgreSQL的arra

  • 问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您

  • 在PostgreSQL 9.3.4中,我有一个名为“person”的JSON类型列,其中存储的数据格式为

  • 问题内容: 但是,如何在没有GUI客户端的情况下获取该语句(例如,使用psql命令行)? 问题答案: 像这样的东西,但是我不确定这是否涵盖创建聚合的所有可能方式(它确实没有考虑到使用引号引起来的标识符)

  • 我试图在放置在PostgreSQL数据库中的JSON数组中找到特定值。我搜索了一些解决方案(在搜索smth时访问了所有链接,如“在json数组postgresql中查找值”),并尝试了它们,但没有成功,下面是我的最后一个工作示例: 这个解决方案只是打印出我的JSON列。我理解和的工作流程,但是对我来说很神奇。也许是原因? 我拥有的JSON结构: 因此,我需要了解如何提取值并找到我需要的值。提前谢谢