【问题标题】:Aggregate strings in descending order in a PostgreSQL query在 PostgreSQL 查询中按降序聚合字符串
【发布时间】:2012-05-15 06:46:31
【问题描述】:
【问题讨论】:
标签:
sql
postgresql
aggregate-functions
postgresql-8.4
【解决方案1】:
在 PostgreSQL 9.0 或更高版本中你可以order elements inside aggregate functions:
SELECT company_id, array_agg(employee ORDER BY company_id DESC)::text
FROM tbl
GROUP BY 1;
这不适用于 PostgreSQL 8.4。您必须预先订购要聚合的值。为此目的使用子选择或CTE (8.4+):
SELECT company_id, array_agg(employee)::text
FROM (SELECT * FROM tbl ORDER BY company_id, employee DESC) x
GROUP BY 1;
我还按company_id 订购,因为这样可以加快聚合速度。
我还使用了将数组转换为 text (array_agg(employee)::text) 的“技巧”,它为您提供了一个基本的、以逗号分隔的字符串,而无需额外的空格,并且是最快的方法。
如需更复杂的格式,请使用array_to_string(array_agg(employee), ', '),就像您在问题中提出的那样。