Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 聚合查询中的串联数组_Postgresql_Postgresql 9.0 - Fatal编程技术网

Postgresql 聚合查询中的串联数组

Postgresql 聚合查询中的串联数组,postgresql,postgresql-9.0,Postgresql,Postgresql 9.0,我有一个起始表,其中每隔15分钟存储一些meteo数据,一个字段以数字数组形式存储1分钟采样时的湿叶,因此每行有15个值数组 现在我想创建这个表的1小时聚合,为这个字段创建一个60个值的数组 我一开始试过一只猫,但是说 数组\u catnumeric[]不存在 该函数明显存在,因此我认为该格式不是预期的格式,我尝试先取消测试,然后聚合,不再工作 最后,我能够通过字符串转换聚合,但这不是我想要的,我将来可能会应用一些数字细化,即60值数组 我粘贴查询以便进一步调查 SELECT dati1_v.

我有一个起始表,其中每隔15分钟存储一些meteo数据,一个字段以数字数组形式存储1分钟采样时的湿叶,因此每行有15个值数组

现在我想创建这个表的1小时聚合,为这个字段创建一个60个值的数组

我一开始试过一只猫,但是说

数组\u catnumeric[]不存在

该函数明显存在,因此我认为该格式不是预期的格式,我尝试先取消测试,然后聚合,不再工作

最后,我能够通过字符串转换聚合,但这不是我想要的,我将来可能会应用一些数字细化,即60值数组

我粘贴查询以便进一步调查

SELECT 
dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text) AS date_hour, 
round(avg(dati1_v.temp1_media), 2) AS t_avg, round(avg(dati1_v.ur1_media), 2) AS hum_avg, sum(dati1_v.pioggia) AS rain_tot, max(dati1_v.pioggia) AS rain_max, 
round((avg(( SELECT avg(lw.lw) AS avg FROM unnest(dati1_v.lw_top_array) lw(lw))) - lws.top_min) / (lws.top_max - lws.top_min) * 100::numeric, 2) AS lw_top_avg, 
array_agg(( SELECT round((avg(lw.lw) - lws.top_min) / (lws.top_max - lws.top_min) * 100::numeric, 2) AS round FROM unnest(dati1_v.lw_top_array) lw(lw))) AS lw_top_array,
array_cat(dati1_v.lw_top_array)  AS lw_top_array_tot,
-- array_agg((select lw_top_array from unnest(dati1_v.lw_top_array))) AS lw_top_array_tot,
-- array_agg(array_to_string(dati1_v.lw_top_array, ',')) AS lw_top_array_tot,
round((avg(( SELECT avg(lw.lw) AS avg FROM unnest(dati1_v.lw_bottom_array) lw(lw))) - lws.bottom_min) / (lws.bottom_max - lws.bottom_min) * 100::numeric, 2) AS lw_bottom_avg, 
array_agg(( SELECT round((avg(lw.lw) - lws.bottom_min) / (lws.bottom_max - lws.bottom_min) * 100::numeric, 2) AS round FROM unnest(dati1_v.lw_bottom_array) lw(lw))) AS lw_bottom_array
FROM dati1_v, lw_settings lws
WHERE lws.id = 1
GROUP BY dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text), lws.top_min, lws.top_max, lws.bottom_min, lws.bottom_max
ORDER BY dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text)
特别是,我的尝试与此特定块相关:

array_cat(dati1_v.lw_top_array)  AS lw_top_array_tot,
-- array_agg((select lw_top_array from unnest(dati1_v.lw_top_array))) AS lw_top_array_tot,
-- array_agg(array_to_string(dati1_v.lw_top_array, ',')) AS lw_top_array_tot

谢谢

ARRAY\u CAT连接两个数组。它不接受单个参数,也不是聚合函数。是否要聚合所有lw_top_数组值?您将不得不使用一个已注释掉的备选方案。谢谢,但当我以任何一种方式尝试第一个解决方案时:array_agg从unnestdati1_v.lw_top_array或array_aggdati1_v.lw_top_array中选择lw_top_array,我会得到错误:错误:找不到数据类型numeric[]的数组类型您无法找到数组,所以预计第二个不会起作用。第一个不起作用,因为array_agg不接受集合,而集合正是子查询返回的。通常情况下,您需要从UNNESTyour_字段u获得类似ARRAY_AGGu的内容,但我承认,我不确定在您的情况下最好的做法是什么。我想说你需要在某个点取消对它的测试,然后在字段中设置数组,但我不知道这会对你的查询产生什么影响-在选择位中有这么多子查询,这有点难以判断。基本上这就是我想的:选择id,从选择g%2作为id的数组中选择数组,取消测试“{1,2,3,4,5,6,7,8,9,10}”:INTEGER[]作为generate_series1,5gx GROUP BY id的ar,您可以看到我将UNNEST放在ARRAY_AGG级别下的级别。在我的情况下,分组结果是相同的,但正如我所说的,在你的情况下,我有点难以判断。可能是重复的