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

Postgres-グループ化されたJSONツリーの単一のテーブルを変換します

    ある意味で、クエリの構造は結果に似ています。

    select json_agg(children)
    from (
        select 
            json_build_object(
                'id', lvl1, 
                'children', json_agg(children order by lvl1)) as children
        from (
            select 
                lvl1, 
                json_build_object(
                    'id', lvl2, 
                    'children', json_agg(items order by lvl2)) as children
            from (
                select 
                    lvl1, 
                    lvl2, 
                    json_build_object(
                        'id', lvl3, 
                        'items', json_agg(item order by lvl3)) as items
                from my_table
                group by lvl1, lvl2, lvl3
                ) s
            group by lvl1, lvl2
            ) s
        group by lvl1
        ) s;
    

    DbFiddle。

    order byに注意してください json配列の順序は定義されていないため、集計では必要ありません。正確に期待される結果を得るためにそれらを追加しました。




    1. MySQL-スーパータイプ/サブタイプの設計

    2. PostgreSQL特権付与が表示されない

    3. ストアド プロシージャのレジャー レポート ロジック

    4. 各単語の最初の文字を大文字にする組み込み関数