sql - 在 PostgreSQL 查询中按降序聚合字符串

标签 sql postgresql aggregate-functions postgresql-8.4

除了问题How to concatenate strings of a string field in a PostgreSQL 'group by' query?

如何按降序对员工进行排序?

我正在使用不支持 string_agg() 的 PostgreSQL 8.4。我尝试使用以下内容,但不受支持:

array_to_string(array_agg(employee ORDER BY employee DESC), ',')

对于正确答案的任何提示,我将不胜感激。

最佳答案

在 PostgreSQL 9.0 或更高版本中,您可以 order elements inside aggregate functions :

SELECT company_id, string_agg(employee, ', ' ORDER BY company_id DESC)::text
FROM   tbl
GROUP  BY 1;

string_agg()ORDER BY 均不适用于 PostgreSQL 8.4。您必须预先订购要聚合的值。使用子选择或 CTE (pg 8.4+) 为此:

SELECT company_id, array_to_string(array_agg(employee), ', ')
FROM  (SELECT * FROM tbl ORDER BY company_id, employee DESC) x
GROUP  BY 1;

我还按 company_id 进行排序,因为这样可以加快后续聚合的速度。

不太优雅,但速度更快。 (对于 Postgres 14 仍然适用。)

参见:

关于sql - 在 PostgreSQL 查询中按降序聚合字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10470585/

相关文章:

sql - 计算一行中为 NULL 的属性数

mysql - 如何绕过子查询中对外部表的引用?

sql - Oracle-RETURNING与聚合函数结合

sql - 更新受组影响的所有行

java - 在 Heroku 上设置 PostgreSQL 数据库(需要 entityManagerFactory)

sql - 在 Rails 4 中编写 SQL

mysql - SQL 仅选择列上具有最大值的行

sql - join 语句中的别名问题

sql - 动态查询中的问题

mysql - 添加引用时出现 SQL 错误