PostgreSQL array_agg命令

表“动物”:

animal_name animal_type Tom Cat Jerry Mouse Kermit Frog 

查询:

 SELECT array_to_string(array_agg(animal_name),';') animal_names, array_to_string(array_agg(animal_type),';') animal_types FROM animals; 

预期结果:

 Tom;Jerry;Kerimt, Cat;Mouse;Frog OR Tom;Kerimt;Jerry, Cat;Frog;Mouse 

我能确定第一个聚合函数中的顺序总是和第二个中的一样。 我的意思是我不想得到:

 Tom;Jerry;Kermit, Frog;Mouse,Cat 

如果您使用的是PostgreSQL版本<9.0,则:

来自: http : //www.postgresql.org/docs/8.4/static/functions-aggregate.html

在当前的实施中,input的顺序原则上是未指定的。 但是,从sorting的子查询中提供input值通常会起作用。 例如:

SELECT xmlagg(x)FROM(SELECT x FROM test ORDER BY y DESC)AS选项卡;

所以在你的情况下,你会写:

 SELECT array_to_string(array_agg(animal_name),';') animal_names, array_to_string(array_agg(animal_type),';') animal_types FROM (SELECT animal_name, animal_type FROM animals) AS x; 

array_agg的input将是无序的,但在两列中都是相同的。 如果你喜欢,你可以添加一个ORDER BY子句的子查询。

使用ORDER BY,就像手册中的这个例子:

 SELECT array_agg(a ORDER BY b DESC) FROM table; 
Interesting Posts