sql >> データベース >  >> RDS >> PostgreSQL

JSON列から平均を計算する

    @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;
    

    SQLフィドル。

    次のページで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ではありません )または最初に正規化されたスキーマで。




    1. CI-何が悪かったのか見せてください

    2. Oracle PL / SQL-コレクション(ネストされたテーブル)

    3. SQLServerクエリでNULLを0に置き換える

    4. SQL常時オン可用性グループ:コンピューターオブジェクト