【问题标题】:Aggregate strings in descending order in a PostgreSQL query在 PostgreSQL 查询中按降序聚合字符串
【发布时间】:2012-05-15 06:46:31
【问题描述】:

除了问题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), ',')

如果有任何提示,我将不胜感激。

【问题讨论】:

    标签: 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), ', '),就像您在问题中提出的那样。

    【讨论】:

    • 谢谢伙计,这就是我要找的:)
    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2021-04-01
    相关资源
    最近更新 更多