除问题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), ',')
我很欣赏任何正确答案的暗示。
答案 0 :(得分:16)
在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), ', ')
。