我想使用group by查询将两列连接起来,生成一个用括号分隔的array.我知道这个问题和this个问题有关,但和往常一样,我的用例有点不同.

一个简单的例子(也称为SQL Fiddle).

ID  X   Y
3   0.5 2.71
3   1.0 2.50
3   1.5 2.33
6   0.5 2.73
6   1.5 2.77

但是,我想连接/聚合X/Y列,以获得以下内容:

ID  XY
3   [[0.5,2.71],[1.0,2.50],[1.5,2.33]]
6   [[0.5,2.73],[1.5,2.77]]

目前,我已try 将这些列合并为一个列,如下所示:

SELECT "ID",concat_ws(', ',"X", "Y") as XY FROM Table1;

返回:

ID  xy
3   0.5, 2.71
3   1, 2.50
3   1.5, 2.33
6   0.5, 2.73

使用array_agg():

SELECT "ID",array_to_string(array_agg("X"),',') AS XY
FROM Table1
GROUP BY "ID";

导致:

ID  xy
3   0.5,1,1.5
6   0.5

我觉得我离得越来越近了,但如果能伸出援助之手,我将不胜感激.

推荐答案

从这两列创建一个数组,聚合数组:

select id, array_agg(array[x,y])
from the_table
group by id;

请注意,数组的默认文本表示形式使用大括号({..})而不是方括号([..])

Postgresql相关问答推荐

更新带有视图的表并在关系员工的规则中检测到无限的回归"

如何在postquist中修剪第一/后文件名

Postgis超过2个表的查询在运行时爆炸

Select 所有数组类型和维度

数组格式类型的PostgreSQL日期

PG 16 的 AGE 安装抛出错误:无法创建 src/backend/parser/ag_scanner.c

表示 SQL 表的 Go struct

为什么我使用 VBA 只能从 postgres 获得 10 行?

无法从外部连接到在 AWS EC2 实例上运行的 Postgres

使用 pgx.CopyFrom 将 csv 数据批量插入到 postgres 数据库中

PostgreSQL 如何比 SQLite 更快地执行写入?

PostgreSQL ORDER BY 问题 - 自然排序

SQLAlchemy 中使用什么类型存储字节字符串?

在远程机器上Restore dump

Postgresql:在插入列时(或之前)自动小写文本

Postgres 表中列的顺序会影响性能吗?

将属性添加到 Sequelize FindOne 返回的对象

我应该在 Django DATABASE ENGINE 中使用哪个 Postgres 值?

ruby on rails jsonb 列默认值

PL/pgSQL 中的 BREAK 语句