除了问题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/