如何按降序对员工进行排序?
我正在使用不支持的PostgreSQL 8.4 string_agg()。我尝试使用以下内容,但不支持此功能:
string_agg()
array_to_string(array_agg(employee ORDER BY employee DESC), ',')
我希望能找到正确答案的任何提示。
在PostgreSQL 9.0 或更高版本中,您可以在聚合函数中对元素进行排序:
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另外订购,因为这样可以加快聚合速度。
company_id
我还使用了将数组强制转换为text(array_agg(employee)::text)的“技巧” ,它为您提供了一个基本的,用逗号分隔的字符串,而没有额外的空格,这是最快的方法。 对于更复杂的格式设置,请使用array_to_string(array_agg(employee), ', ')与问题相同的格式。
text
array_agg(employee)::text
array_to_string(array_agg(employee), ', ')