表'动物':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Run Code Online (Sandbox Code Playgroud)
预期结果:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Run Code Online (Sandbox Code Playgroud)
我可以确定第一个聚合函数中的顺序将始终与第二个中的顺序相同.我的意思是我不想得到:
Tom;Jerry;Kermit, Frog;Mouse,Cat
Run Code Online (Sandbox Code Playgroud) 我试图将数据作为一个多维数组传递,我的行为对我来说似乎很奇怪.具体来说,我试图从二维数组中获取单个元素(因此我的二维数组中的一维数组),并且它不能按照我期望的方式工作.
在下面的例子中,#2,4和5以我期望的方式工作,但1和3没有.
db=> select s.col[2] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
(1 row)
db=> select s.col[2:2] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
{{4,5,6}}
(1 row)
db=> select array[s.col[2]] from (select array[[1,2,3],[4,5,6]] as col) s;
array
--------
{NULL}
(1 row)
db=> select array[s.col[2:2]] from (select array[[1,2,3],[4,5,6]] as col) s;
array
-------------
{{{4,5,6}}}
(1 row)
db=> select s.col[2][1] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
4
(1 row)
Run Code Online (Sandbox Code Playgroud)
有这方面的文件吗?我现在有一些对我来说运作良好的东西,但它很难看,我担心它不会做我想做的事情.从技术上讲,我得到一个二维数组,其中1维只有1个元素.我宁愿得到一个阵列.
我读过(其中包括):
我只是没有看到我在寻找什么.
我有一个非常大的数组,我使用 Apache Madlib 进行了计算,我想对该二维数组中的每个数组应用一个操作。
我找到了可以帮助我从这个相关答案中解除它的代码。然而,在这个非常大的 2d 数组(150,000+ 1d float 数组)上,代码非常慢。虽然unnest()只需要几秒钟的时间来运行,但即使等待了几分钟,代码也还没有完成。
当然,必须有一种更快的方法将大型二维数组解除嵌套到较小的一维数组中?如果该解决方案使用 Apache Madlib,则加分。我确实在名为 的文档中找到了一条线索deconstruct_2d_array,但是,当我尝试在矩阵上调用该函数时,它失败并出现以下错误:
错误:函数“deconstruct_2d_array(double precision[])”:无效的类型转换。内部复合类型比后端复合类型有更多的元素。
读完这篇文章后,我写了一个天真的尝试来制作这个
col1
---------
1
4
7
Run Code Online (Sandbox Code Playgroud)
由此
ARRAY[[1,2,3], [4,5,6], [7,8,9]]
这有效
SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:3][1:1]);
但就我而言,我不知道外部数组的长度。
那么有没有一种方法可以将切片“字符串”组合在一起以考虑到这种可变性?
这是我的尝试。我知道,这有点好笑
_ids := _ids_2D[('1:' || array_length(_ids_2D, 1)::text)::int][1:1];
正如你所看到的,我只是想创建 的效果[1:n]。显然'1:3'不会很好地解析数组切片所需的内容。
我显然可以使用unnest_2d_1d上面链接的答案中欧文提到的东西,但希望有更优雅的东西。