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

在PostgreSQL上使用SQL连接数组中的多行

卞嘉许
2023-03-14
问题内容

我有一个像这样构造的表:

oid | identifier | value
1   | 10         | 101
2   | 10         | 102
3   | 20         | 201
4   | 20         | 202
5   | 20         | 203

我想查询此表以得到这样的结果:

identifier | values[]
10         | {101, 102}
20         | {201, 202, 203}

我想不出办法。那可能吗 ?如何 ?

非常感谢你。


问题答案:

这是Postgres内置的,因为有几个版本,因此您不再需要定义自己的名称,名称为array_agg()

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(这是Postgres 8.4.8)。

请注意,未ORDER BY指定no ,因此结果行的顺序取决于所使用的分组方法(此处为哈希),即未定义。例子:

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

现在,我不知道为什么会收到{10,2,4,6,8}{9,7,3,1,5},因为generate_series()应该按顺序发送行。



 类似资料:
  • 我有一个表订阅,我想在一个连接中用JOOQ编写多个selectCount,并用不同的谓词连接到数据库。为此,我创建了一个查询列表: 最后,我使用批处理启动了这个查询列表: 我原本希望在执行的返回值中包含上述查询的结果,但我得到了一个整数数组,其中填充了0个值。 这是使用JOOQ运行多个的正确方法吗?方法返回的整数数组的含义是什么? 我在JOOQ博客中查看了这个链接,讨论了“如何在一个查询中计算多个

  • 我正在使用Google Cloud SQL提供的Postgres,最近我们看到连接的数量增加了很多。 不得不将限制从200提高到500,然后提高到1000。在Google Cloud控制台中,Postgres报告了800个当前连接。 然而,我不知道这些联系来自哪里。我们有一个应用程序引擎服务,目前访问它的流量不多,另一个应用程序托管在kubernetes上。还有十几个左右的批处理作业连接到它。很明

  • 我使用postgres、wildfly-swarm、hibernate,我的事务是bean管理的。 my Project-defaults.yml datasources:data-sources:part 在模拟应用程序和postgres之间的连接丢失(关闭DB、iptables丢弃数据包等,然后执行一些请求,然后再次启动DB或清除iptables丢弃规则)后,DB已启动,但Hibernate/

  • 问题内容: 参考原始的stackoverflow问题,我试图将gin索引应用于Postgres 9.4中数组对象中的键,但没有得到第一个答案中所述的结果。 您能纠正错误吗? 我遵循的步骤已写在下面。 第1部分:创建表和索引 第2部分:查询 该查询给出空结果。 我也尝试使用GIN索引。 替代索引和查询: 问题答案: 原始答案中的这个特定jsonb示例缺少用于包含查询的非原始对象周围的数组层。此后已修

  • 问题内容: 我的表的详细信息字段中有两个以下JSON数组,并且需要像在另一个关系表中使用的那样评估查询。 我想对此JSON数组评估以下查询: 我使用了以下查询 和许多类似的查询,包括横向联接 : 但是,当通过交叉联接将其他字段(价格和日期)添加到查询中时,行数成倍增加。因此,我正在寻找要使用的新功能,但无法正确应用。如何在PostgreSQL中使用获得先前查询的结果?任何帮助,将不胜感激。 更新:

  • 问题内容: 听起来像用于应用程序引擎(1)的较新的云SQL JDBC驱动程序支持连接池。 我们的应用程序使用Spring + Hibernate,并且我们正尝试使用现有的Java框架之一进行连接池(BoneCP,C3p0,Hikari),但由于应用程序引擎的限制,迄今为止未能使用其中任何一个。使用下面的Spring + Hibernate + C3p0进行堆栈跟踪。有人设法使它起作用吗? (1):