PostgreSQL:使用某种排序条件对元素数组进行排序

ali*_*noi 3 arrays sorting postgresql sql-order-by aggregate-functions

假设您需要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;
$$;
Run Code Online (Sandbox Code Playgroud)

Gab*_*ger 5

您必须ORDER BY进入聚合函数,以影响聚合顺序,请参阅手册

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;
$$;
Run Code Online (Sandbox Code Playgroud)