Je json-array is in de war, zoals @posz heeft gereageerd . Zou moeten zijn:
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]}');
Je vraag is ook op meerdere manieren verdraaid. Zou zo werken in 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;
In de komende pagina 9.4 we kunnen vereenvoudigen met de nieuwe json_array_elements_text()
(ook minder foutgevoelig in de cast):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Meer details:
Terzijde:het zou veel efficiënter zijn om dit op te slaan als een gewone array (numeric[]
, niet json
) of in een genormaliseerd schema om mee te beginnen.