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;