Dit json-array er rodet, som at @posz kommenterede a> . Skulle være:
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]}');
Din forespørgsel er også fordrejet på flere måder. Ville fungere sådan på side 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;
I den kommende side 9.4 vi kan forenkle med den nye json_array_elements_text()
(også mindre fejltilbøjelig i rollebesætningen):
SELECT t.id, avg(x::numeric) AS avg_speed
FROM tbl t
, json_array_elements_text(speed_data->'speed') x
GROUP BY t.id;
Flere detaljer:
Bortset fra:Det ville være meget mere effektivt at gemme dette som almindeligt array (numeric[]
, ikke json
) eller i et normaliseret skema til at begynde med.