gpt4 book ai didi

arrays - 将 PostgreSQL 中的两个数组合并为索引和值?

转载 作者:行者123 更新时间:2023-11-29 12:01:10 24 4
gpt4 key购买 nike

假设我在一个表中有两个数组字段,如下所示:

 Column |   Type    |
--------+-----------+
index | integer[] |
value | integer[] |

其中 index 和 value 的长度相等,'index' 中的值保证是唯一的,例如:

SELECT * FROM ArrayTest;
index | value
-----------+-----------------------------------
{1,3,5,6} | {100, 103, 105, 106}

我将如何进行返回一个新数组的查询,其中“index”中的值用作数组索引,而“value”中的值成为与给定索引关联的值,即类似于:

SELECT some_array_function(index, value) as newarray;
new_array
--------------------------------
{100, NULL, 103, NULL, 105, 106}

我想实现的和PHP中的array_combine是一样的。

最佳答案

虽然像这样存储数据总体上是个坏主意,但一种方法是使用 unnest 函数并在客户端处理结果:

SELECT unnest(index), unnest(value) FROM ArrayTest;

unnest | unnest
--------+--------
1 | 100
3 | 103
5 | 105
6 | 106

如果你必须要有一个函数来创建一个新的数组,这里有一个简短的函数可以做到这一点:

CREATE FUNCTION array_stitch(index_array integer[], value_array integer[]) RETURNS integer[]
LANGUAGE plpgsql IMMUTABLE
AS $$
DECLARE
ptr INTEGER;
new_array INTEGER[];
BEGIN
FOR ptr IN 1..array_upper(index_array,1) LOOP
new_array[index_array[ptr]] := value_array[ptr];
END LOOP;

RETURN new_array;
END;
$$;

编辑:这是另一种方法:

SELECT array_agg(val order by idx) as output_array
FROM (SELECT generate_series(1,idx[array_upper(idx,1)]) from array_test) as g(idx)
LEFT JOIN (SELECT unnest(idx) as idx, unnest(val) as val FROM array_test\
) as data_points USING (idx);

关于arrays - 将 PostgreSQL 中的两个数组合并为索引和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com