PostgreSQL:使用某种排序条件对元素数组进行排序
PostgreSQL: sort an array of elements using some sorting condition
假设您需要按左边界降序对 numranges
的数组进行排序。下面的做法是不是最简单的:unnest
数组变成了table,排序后table,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;
$$;
您必须将 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;
$$;
假设您需要按左边界降序对 numranges
的数组进行排序。下面的做法是不是最简单的:unnest
数组变成了table,排序后table,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;
$$;
您必须将 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;
$$;