Array json Anda kacau, seperti komentar @posz . Seharusnya:
CREATE TABLE tbl (id int, speed_data json);
INSERT INTO tbl VALUES
(391982, '{"speed":[1.3,1.3,1.4,1.5]}')
, (391983, '{"speed":[0.9,0.8,0.8,1.0]}');
Permintaan Anda juga dipelintir dalam berbagai cara. Akan bekerja seperti ini di hal 9.3 :
SELECT t.id, avg(x::text::numeric) AS avg_speed
FROM tbl t
, json_array_elements(speed_data->'speed') x
GROUP BY t.id;
Dalam hal mendatang 9.4 kita dapat menyederhanakannya dengan json_array_elements_text()
yang baru (juga kurang rawan kesalahan dalam pemeran):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Selengkapnya:
Selain:Akan jauh lebih efisien untuk menyimpan ini sebagai array biasa (numeric[]
, bukan json
) atau dalam skema yang dinormalisasi untuk memulai.