Вашият json масив е объркан, като @posz коментира . Трябва да бъде:
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]}');
Вашата заявка също е изкривена по много начини. Ще работи по този начин в стр. 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;
В предстоящата стр. 9.4 можем да опростим с новия json_array_elements_text()
(също по-малко податливи на грешки в актьорския състав):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Повече подробности:
Настрана:Би било много по-ефективно да съхранявате това като обикновен масив (numeric[]
, а не json
) или в нормализирана схема като начало.