在postgresql中对使用array_agg创建的文本聚合进行排序

Ric*_*ard 24 postgresql

我在postgresql中有一个表.下表"动物"将解释我的问题:

name
------
tiger
cat
dog
Run Code Online (Sandbox Code Playgroud)

现在我使用以下查询:

SELECT
    array_to_string(array_agg("name"), ', ')
FROM
    animals;
Run Code Online (Sandbox Code Playgroud)

结果是:"老虎,猫,狗".但我希望在将聚合转换为字符串之前对其进行排序.所以这是我希望的结果:

"cat, dog, tiger".
Run Code Online (Sandbox Code Playgroud)

那么如何在将postgresql 8.4转换为字符串之前对其进行排序.行"name"上的ORDER BY不起作用,内置排序函数仅处理整数值.

任何人都好主意,如何在纯SQL中解决这个问题?

理查德很多

Mik*_*e T 53

对于现代PostgreSQL(从9.0版开始),您可以ORDER BY在聚合表达式中使用子句:

SELECT
    array_to_string(array_agg(name ORDER BY name), ', ')
FROM
    animals;
Run Code Online (Sandbox Code Playgroud)

此外,出于特定目的,您可以使用string_agg简化查询:

SELECT
    string_agg(name, ', ' ORDER BY name)
FROM
    animals;
Run Code Online (Sandbox Code Playgroud)


Mat*_*ood 14

这将在PostgreSQL 9.0中提供:

http://www.postgresql.org/docs/9.0/static/release-9-0.html,E.1.3.6.1.骨料

在此期间,你可以做这样的事情来解决这个问题(尽管很笨拙):

SELECT array_agg(animal_name)
FROM (
    SELECT "name" AS animal_name
    FROM animals
    ORDER BY "name"
) AS sorted_animals;
Run Code Online (Sandbox Code Playgroud)