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

标签 postgresql

我在 postgresql 中有一个表。下表“动物”将做解释我的问题:

name
------
tiger
cat
dog

现在我正在使用以下查询:

SELECT
    array_to_string(array_agg("name"), ', ')
FROM
    animals;

结果是:“老虎、猫、狗”。但我想在将聚合转换为字符串之前对其进行排序。这就是我希望的结果:

"cat, dog, tiger".

那么在将字符串数组转换为字符串之前,如何在 postgresql 8.4 中对字符串数组进行排序。 “名称”行上的 ORDER BY 不起作用,内置排序函数仅处理整数值。

谁有好主意,如何用纯 SQL 解决这个问题?

非常感谢 理查德

最佳答案

对于现代 PostgreSQL(从 9.0 版开始),您可以使用 ORDER BY clause in an aggregate expression :

SELECT
    array_to_string(array_agg(name ORDER BY name), ', ')
FROM
    animals;

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

SELECT
    string_agg(name, ', ' ORDER BY name)
FROM
    animals;

关于postgresql - 对在 postgresql 中使用 array_agg 创建的文本聚合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461470/

相关文章:

ruby-on-rails - 无法连接到服务器 : "/var/run/postgresql/.s.PGSQL.5432"?

postgresql - 将日志文件中的行号与函数代码匹配

mysql - Yii2:支持 MySQL 和 PostgreSQL

macos - 如何在 Mac OS 上使用 homebrew 将 postgresql 从 10.1 降级到 9.6

postgresql - Elixir -- Ecto -- 复合主键和关系

sql - 如何解释 Postgresql rank() 关系

postgresql - PSQL - 如果列项不存在,则从 csv 文件复制

postgresql - 库未加载 :/usr/local/opt/readline/lib/libreadline. 6.2.dylib

sql - SUM(a*b) 不工作

Python & Sqlalchemy - 连接模式 -> 随机断开与远程服务器的连接