@poszのコメントのように、json配列がめちゃくちゃになっています 。次のようにする必要があります:
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
ではありません )または最初に正規化されたスキーマで。