postgres-聚合文本数组中的项目

S

我有一个文本项数组,数组中的每个文本项都是定界字符串,这是一个示例:

drop table if exists tmp;
create table tmp(x text);
insert into tmp select ('1~41.5~50~1|2~43.72~1000~1|3~52.0~1~1|4~57.5~7500~1|5~68.0~8~1|6~80.95~6~1|7~84.25~300~1');

with t as (
    select string_to_array(x , '|') arr 
    from  tmp
)
select * , cardinality(arr) arr_len , split_part(arr[1],'~',2)
from t

样本输出:

"{1~41.5~50~1,2~43.72~1000~1,3~52.0~1~1,4~57.5~7500~1,5~68.0~8~1,6~80.95~6~1,7~84.25~300~1}";7;"41.5"

我对提取价格感兴趣,该价格表示为每个数组条目的第二项(当用〜分隔时),因此输出将是:

41.5,43.72,52.0,...

当使用时split_part,该方法仅返回特定数组索引的一个结果,并且我不希望对所有索引进行硬编码,因为它会有所不同。

建议表示赞赏。

专线小巴

这是一种方法:

select t.*, w.prices
from tmp t
cross join lateral (
    select array_agg(split_part(v.z, '~', 2)) prices
    from regexp_split_to_table(t.x, '\|') as v(z)
) w

在子查询中,我们使用分隔符将字符串拆分为行|然后,我们将每一行的第二个元素聚合回一个数组。

您可以明确表示要保留元素的顺序with ordinality

select t.*, w.prices
from tmp t
cross join lateral (
    select array_agg(split_part(v.z, '~', 2) order by v.n) prices
    from regexp_split_to_table(t.x, '\|') with ordinality as v(z, n)
) w

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过文本数组中的任何值来挑战在文本数组中搜索Postgres sql

来自分类Dev

Postgres:如何将文本数组列中的元素复制到 json 列中?

来自分类Dev

从NodeJS Knex插入Postgres多维文本数组

来自分类Dev

Postgres:将列聚合到数组中

来自分类Dev

更改括号在postgres中的数组聚合

来自分类Dev

在postgres中更改数组聚合的括号

来自分类Dev

检查文本数组中的项目

来自分类Dev

使用typeorm在postgres的数组中搜索项目

来自分类Dev

追加+删除Postgres文本数组元素。产生庞大的表格大小

来自分类Dev

Postgres 中的数组数组

来自分类Dev

将聚合函数应用于Postgres中的数组字段?

来自分类Dev

Postgres中的嵌套JSON聚合

来自分类Dev

比较Postgres中的数组

来自分类Dev

重塑Postgres中的数组?

来自分类Dev

根据条件聚合对Postgres jsonb数组的查询

来自分类Dev

jsonb的Postgres聚合函数

来自分类Dev

Java中的文本数组

来自分类Dev

在 postgres 中调整文本长度

来自分类Dev

如何在Postgres数组中聚合多个记录的所有数组值?

来自分类Dev

在postgres中跨多个列聚合函数

来自分类Dev

在Postgres JSON数组中查询

来自分类Dev

与Postgres中的数组相对的集合

来自分类Dev

比较表与Postgres中的数组

来自分类Dev

Postgres中数组的矢量算法

来自分类Dev

在Postgres中查询jsonb数组

来自分类Dev

postgres 从文本中提取 int 数组

来自分类Dev

Postgres数组查询

来自分类Dev

Rails OR查询与Postgres数组

来自分类Dev

Postgres GROUP BY数组列