我有一张桌子:

create table test (
   id integer, 
   rank integer,
   image varchar(30)
); 

那么一些价值观:

id | rank | image   
---+------+-------  
 1 |    2 | bbb  
 1 |    3 | ccc  
 1 |    1 | aaa  
 2 |    3 | c  
 2 |    1 | a  
 2 |    2 | b  

我想按id对它们进行分组,并按照秩给出的顺序连接图像名称.在mySQL中,我可以做到:

  select id, 
         group_concat( image order by rank asc separator ',' ) 
    from test 
group by id;

结果是:

如果我try 使用数组_agg()名称将不会以正确的顺序显示,显然我无法找到对它们进行排序的方法.(我用的是postgres 8.4)

推荐答案

在PostgreSQL 8.4中,您不能显式地对array_agg进行排序,但可以通过对子查询传递到组/聚合的行进行排序来解决这一问题:

SELECT id, array_to_string(array_agg(image), ',')
FROM (SELECT * FROM test ORDER BY id, rank) x
GROUP BY id;

在PostgreSQL 9.0中,聚合表达式可以有一个ORDER BY子句:

SELECT id, array_to_string(array_agg(image ORDER BY rank), ',')
FROM test
GROUP BY id;

Postgresql相关问答推荐

计算两个子查询之间的差异

在SqlalChemy中转义动态CamelCase场

使用 pgAdmin 4 v7.4 在 Windows 11 上全新安装 PostgreSQL 15.3-3 无法启动 - 卡在正在加载 pgAdmin 4 v7.4...

PostgreSQL 中的 Datum 数据类型是什么以及它的用途是什么?

表示 SQL 表的 Go struct

处理 sqlalchemy 断开连接的更好方法

在psql中,为什么有些命令没有效果?

使用 try/except 与 psycopg2 或with closing?

为什么 PostgreSQL 将用户和组合并为角色?

Postgres 在 WHERE id != int 查询中排除 NULL

如何 Select 列值为空的行?

PostgreSQL如何连接间隔值'2天'

如何使用 Django Migrations 重新创建已删除的表?

如何从 CSV 为 PostgreSQL 副本生成模式

postgres - 比较两个数组

Postgres Hstore 与 Redis - 性能方面

在 PGAdmin 中搜索所有功能的文本

如何将 CSV 数据插入 PostgreSQL 数据库(远程数据库)

Postgis / Geodjango:无法确定数据库的 PostGIS 版本

SQL:子查询的列太多