PostgreSQL:如何根据阈值将文本字符串分割成片?
问题描述:
我在我的PostgreSQL数据库的样本数据,如如下:PostgreSQL:如何根据阈值将文本字符串分割成片?
ID Thresh array
(int) (int) (text)
1 171 61,201,20.0
2 89 59,119,9.0
阵列exaplanation如下:在61, 201, 20.0
第一61
和第二201
是start
和结束的array
范围values
。而20.0
是array
的mean
值。对于每个ID
,如果遇到阈值Thresh
,我需要将array range
分割成片。如果它没有遇到阈值,那么输出将是相同的。预期的输出如下所示:
ID Thresh array
(int) (int) (text)
1 171 61,171,20.0,171,201,20.0
2 89 59,89,9.0,89,119,9.0
虽然,例如20.0
分裂array
平均值和9.0
将保持不变。有人可以建议我如何将阵列区域分割成片?
答
将字符串数组,修改其内容(如果需要)和数组转换回字符串:
with my_table(id, thresh, arr) as (
values
(1, 171, '61,201,20.0'),
(2, 89, '59,119,9.0')
)
select
id, thresh,
array_to_string(a, ',') as arr
from (
select
id, thresh,
case
when thresh between a[1] and a[2]
then array[a[1], thresh, a[3], thresh, a[2], a[3]]
else a
end as a
from (
select
id, thresh,
string_to_array(arr, ',')::float[] a
from my_table
) s
) s;
id | thresh | arr
----+--------+----------------------
1 | 171 | 61,171,20,171,201,20
2 | 89 | 59,89,9,89,119,9
(2 rows)
告诉我们,你至今尝试过的代码,请。这可能比你的英文解释更清楚。另外,如果可以查询数据库,处理文本并报告结果,请为'python'或类似内容添加标签。限制SQL解决方案可能比你想要的更紧缩。 –
谢谢你的建议。反正我编辑过标签。 –