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

SQLでJSONオブジェクトの配列として返す(Postgres)

    json_build_object() Postgres9.4以降

    またはjsonb_build_object() jsonbを返す 。

    SELECT value_two, json_agg(json_build_object('value_three', value_three
                                               , 'value_four' , value_four)) AS value_four
    FROM   mytable 
    GROUP  BY value_two;

    マニュアル:

    可変引数リストからJSONオブジェクトを構築します。慣例により、引数リストは交互のキーと値で構成されます。

    すべてのバージョン(Postgres 9.3を含む)

    row_to_json() ROWを使用 式はトリックを行います:

    SELECT value_two
         , json_agg(row_to_json((value_three, value_four))) AS value_four
    FROM   mytable
    GROUP  BY value_two;
    

    ただし、元の列名は失われます。登録された行タイプへのキャストはそれを回避します。 (一時テーブルの行タイプは、アドホッククエリにも使用されます。)

    CREATE TYPE foo AS (value_three text, value_four text);  -- once in the same session
    
    SELECT value_two
         , json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
    FROM   mytable
    GROUP  BY value_two;

    または、副選択を使用します ROWの代わりに 表現。より冗長ですが、型キャストはありません:

    SELECT value_two
         , json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
    FROM   mytable
    GROUP  BY value_two;

    クレイグの関連する回答の詳細:

    • ネストされた結合を使用したPostgreSQL9.2row_to_json()

    db<>ここでフィドル
    古いsqlfiddle




    1. MariaDBで数値を含まない値を取得する方法

    2. TimescaleDBのストリーミングレプリケーションの概要

    3. ORA-30926:ソース表で安定した行のセットを取得できません

    4. Java SQLエラー:リレーションTable_Nameが存在しません