【问题标题】:PostgreSQL: sort an array of elements using some sorting conditionPostgreSQL:使用某种排序条件对元素数组进行排序
【发布时间】:2015-11-27 09:55:55
【问题描述】:

假设您需要对numranges 的数组进行排序,例如按左边界降序排列。下面的方法是不是最简单的:unnest 将数组放入一个表,对表进行排序,array_agg 将它重新放入一个数组。这在代码中看起来如何?这是我的非工作尝试:

DO $$
DECLARE
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN

    x := (
          WITH x AS (
              SELECT xrow FROM unnest(x) AS xrow
          )
          SELECT array_agg(xrow) FROM x ORDER BY lower(xrow) DESC
    );
    RAISE NOTICE '%', x;
END;
$$;

【问题讨论】:

    标签: arrays postgresql sorting sql-order-by aggregate-functions


    【解决方案1】:

    您必须将ORDER BY 移动到聚合函数中,以影响聚合顺序参见manual

    DO $$
    DECLARE
        x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
    BEGIN
    
        x := (WITH x AS (
                SELECT xrow FROM unnest(x) AS xrow
            )
            SELECT array_agg(xrow  ORDER BY lower(xrow) DESC) FROM x
    
        );
        RAISE NOTICE '%', x;
    END;
    $$;
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2012-11-02
      • 2022-08-15
      • 2017-04-20
      • 1970-01-01
      相关资源
      最近更新 更多