PostgreSQL:`unnest` 一个数组,然后`array_agg` 返回
PostgreSQL: `unnest` an array and then `array_agg` it back
我的目标是获取一个 array
,用 unnest
将它解嵌到一个 table 中,然后用 array_agg
将它聚合回一个数组。为什么第一个 DO
块失败而第二个块成功?
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(x) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(y) FROM unnest(x) AS y);
RAISE NOTICE '%', x;
END;
$$;
第一个 DO
列的名称是 unnest
。您没有 x
.
列
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(unnest) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
第二个 DO
列的名称是 y
,您可以在此列上执行 string_agg()
。
我的目标是获取一个 array
,用 unnest
将它解嵌到一个 table 中,然后用 array_agg
将它聚合回一个数组。为什么第一个 DO
块失败而第二个块成功?
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(x) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(y) FROM unnest(x) AS y);
RAISE NOTICE '%', x;
END;
$$;
第一个 DO
列的名称是 unnest
。您没有 x
.
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(unnest) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
第二个 DO
列的名称是 y
,您可以在此列上执行 string_agg()
。