你好吗?
我需要在PostgreSQL中以JSONB的形式存储一个数字数组。
现在,我正试图从这个JSON计算统计时刻,我面临着一些问题。
我的数据示例:
我已经能够将JSON转换为浮点数组。
我使用了一个函数将jsonb转换为浮点数组。
CREATE OR REPLACE FUNCTION jsonb_array_castdouble(jsonb) RETURNS float[] AS $f$
SELECT array_agg(x)::float[] || ARRAY[]::float[] FROM jsonb_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;
使用此SQL:
with data as (
select
s.id as id,
jsonb_array_castdouble(s.snx_normalized) as serie
FROM
spectra s
)
select * from data;
我找到了一个可以进行这些计算的函数,我需要为此传递一个数组:https://github.com/ellisonch/PostgreSQL-Stats-Aggregate/
但是这个函数以另一种方式需要一个数组:不嵌套的
我已经尝试过使用unnest,但是它只会得到一个值,而不是整个数组:(。
我的目标是:
能够应用统计矩(峰度,偏度)的每一行。
例如:
| 指标|偏度|
| - ------|- ------|
| 1个|二十一二一三一|
| 第二章|一点一二三|
额外的好处:有一种方法可以不使用这个“with data”,而是在select语句中使用转换?
1条答案
按热度按时间vtwuwzda1#
snx_wavelengths是JSON,对吗?而且你提供的是图片而不是文本:(数据看起来像(id,snx_wavelengths)-我相信你的意思是id表示index(使用关键字不是一个好主意,需要标识符双引号):
如果这是正确的:
DBFiddle demo
顺便说一句,如果你不想使用,你不需要在原始示例中使用“with data”,可以用一个子查询来替换。
型
编辑:如果您还需要其他统计数据:
DBFiddle demo