根据元素的位置乘以数组中的元素

缺口

有什么有效的函数可以用来按位置增加数组中元素的数量?

例如,如果我有一个数组:

ARRAY[10,20,30,40,50]::INT[]

我想变成:

ARRAY[10,20,20,30,30,30,40,40,40,40,50,50,50,50,50]::INT[]

因此我有1个“ 10”,2个“ 20”,3个“ 30”,4个“ 40”和5个“ 50”。

对于数组:

ARRAY[10,20,30,40,10]::INT[]

我想变成:

ARRAY[10,20,20,30,30,30,40,40,40,40,10,10,10,10,10]::INT[]

这样我就有6个“ 10”,2个“ 20”,3个“ 30”和4个“ 40”。

欧文·布兰德斯特
WITH t AS (SELECT ARRAY[10,20,30,40,50]::INT[] AS arr)   -- variable for demo
SELECT ARRAY(
   SELECT unnest(array_fill(arr[idx], ARRAY[idx])) AS mult
   FROM  (SELECT arr, generate_subscripts(arr, 1) AS idx FROM t) sub
   );

我将逻辑包装到一个简单的IMMUTABLE SQL函数中:

CREATE OR REPLACE FUNCTION f_expand_arr(_arr anyarray)
  RETURNS anyarray AS
$func$
SELECT ARRAY(
   SELECT unnest(array_fill(_arr[idx], ARRAY[idx]))
   FROM  (SELECT generate_subscripts(_arr, 1) AS idx) sub
   )
$func$ LANGUAGE sql IMMUTABLE;

由于多态参数类型,适用于任何基本类型的数组anyarray
如何编写返回文本或整数值的函数?

手动上generate_subscripts()array_fill()

注意:这适用于实际的数组索引,它可能与Postgres中的顺序数组位置不同。您可能对@Daniel的“标准化”数组索引的方法感兴趣:
对一维数组的数组下标进行标准化,使其以1开头

即将发布的Postgres 9.4(当前为beta)提供WITH ORDINALITY
PostgreSQL unnest(),元素编号

允许这种更加优雅和可靠的解决方案:

CREATE OR REPLACE FUNCTION f_expand_arr(_arr anyarray)
  RETURNS anyarray AS
$func$
SELECT ARRAY(
   SELECT unnest(array_fill(a, ARRAY[idx]))
   FROM   unnest(_arr) WITH ORDINALITY AS x (a, idx)
   )
$func$ LANGUAGE sql IMMUTABLE;

有人可能还会说,实际上并不能保证适当的秩序我声称它是...
并行unnest()和PostgreSQL中的排序顺序

呼叫:

SELECT f_expand_arr(ARRAY[10,20,30,40,10]::INT[]) AS a2;

或对于表中的值:

SELECT f_expand_arr(a) AS a2 FROM t;

SQL提琴。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在bash中乘以数组元素

来自分类Dev

乘以数组元素的函数

来自分类Dev

根据给定java的位置更改数组中的元素

来自分类Dev

乘以 XML 中的元素

来自分类Dev

获取数组元素中的位置

来自分类Dev

将数组中的所有元素乘以外部数字?

来自分类Dev

将数组中的所有元素乘以外部数字?

来自分类Dev

根据条件和数组元素位置循环遍历 postgresql 表中的数组返回

来自分类Dev

根据元素在组中的位置设置样式

来自分类Dev

根据位置从列表中删除多个元素

来自分类Dev

根据元素在组中的位置设置样式

来自分类Dev

在Java中,如何根据元素中特定字母的位置在数组中查找和显示String元素?

来自分类Dev

在Java中,如何根据元素中特定字母的位置在数组中查找和显示String元素?

来自分类Dev

根据其在DOM中的位置对包含DOM元素的数组进行排序

来自分类Dev

根据其在DOM中的位置对包含DOM元素的数组进行排序

来自分类Dev

根据数组中的条件替换元素

来自分类Dev

根据条件从数组中多次删除元素

来自分类Dev

根据索引列表从数组中获取元素

来自分类Dev

根据其值替换数组中的元素

来自分类Dev

根据数组中的值创建Option元素

来自分类Dev

根据数组中的条件替换元素

来自分类Dev

根据SQL查询从数组中删除元素

来自分类Dev

根据值从数组中删除元素

来自分类Dev

如何根据数组中的元素进行过滤?

来自分类Dev

如果元素值大于10,是否可以在数组中乘以元素?

来自分类Dev

Python:在数组中查找元素的位置

来自分类Dev

JSONNET获取元素在数组中的位置

来自分类Dev

数组元素如何乘以大O(n)

来自分类Dev

根据元素的位置更改元素类

Related 相关文章

热门标签

归档