sql >> Database >  >> RDS >> PostgreSQL

Postgres - converteer enkele tabel in gegroepeerde JSON-boom

In zekere zin is de structuur van de query vergelijkbaar met het resultaat:

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.

Let op, dat order by in de aggregaten zijn niet nodig omdat de volgorde van een json-array niet is gedefinieerd. Ik heb ze toegevoegd om precies het verwachte resultaat te krijgen.




  1. pg_dump met --exclude-table bevat nog steeds die tabellen op de achtergrond COPY-commando's die het uitvoert?

  2. Impact van uitvoeringsplan op ASYNC_NETWORK_IO Wachten - Deel 1

  3. MySQL installeren en configureren op Ubuntu 20.04

  4. SQL-query om waardeparen in kolom 1 te selecteren die overeenkomen met een van de twee patronen in kolom 2