Su matriz json está en mal estado, como @posz comentó . Tendría que ser:
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]}');
Su consulta también está retorcida de múltiples maneras. Funcionaría así en pg 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;
En la próxima página 9.4 podemos simplificar con el nuevo json_array_elements_text()
(también menos propenso a errores en el reparto):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Más detalles:
Aparte:sería mucho más eficiente almacenar esto como una matriz simple (numeric[]
, no json
) o en un esquema normalizado para empezar.