Twoja tablica json jest pomieszana, na przykład @posz skomentował . Musiałoby być:
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]}');
Twoje zapytanie jest również przekręcone na wiele sposobów. Działałoby tak na stronie 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;
W nadchodzącej stronie 9.4 możemy uprościć dzięki nowej json_array_elements_text()
(również mniej podatny na błędy w obsadzie):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Więcej szczegółów:
Poza tym:o wiele bardziej wydajne byłoby przechowywanie tego jako zwykłej tablicy (numeric[]
, a nie json
) lub w znormalizowanym schemacie na początek.