use*_*575 22 postgresql array-agg
所以我有这张桌子:
create table test (
id integer,
rank integer,
image varchar(30)
);
Run Code Online (Sandbox Code Playgroud)
然后一些值:
id | rank | image
---+------+-------
1 | 2 | bbb
1 | 3 | ccc
1 | 1 | aaa
2 | 3 | c
2 | 1 | a
2 | 2 | b
Run Code Online (Sandbox Code Playgroud)
我想按id对它们进行分组,并按照rank排序顺序连接图像名称.在mySQL中,我可以这样做:
select id,
group_concat( image order by rank asc separator ',' )
from test
group by id;
Run Code Online (Sandbox Code Playgroud)
输出将是:
__PRE__有没有办法在postgresql中有这个?
如果我尝试使用array_agg(),名称将不会以正确的顺序显示,显然我无法找到对它们进行排序的方法.(我使用的是postgres 8.4)
Jas*_*red 41
在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;
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL 9.0中,聚合表达式可以有一个ORDER BY子句:
SELECT id, array_to_string(array_agg(image ORDER BY rank), ',')
FROM test
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38828 次 |
| 最近记录: |