sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres - konverter enkelt tabel i grupperet JSON-træ

På en måde svarer strukturen af ​​forespørgslen til resultatet:

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.

Bemærk, at order by i aggregaterne er ikke nødvendige, da rækkefølgen af ​​et json-array er udefineret. Jeg har tilføjet dem for at få præcis det forventede resultat.




  1. Hvordan eliminerer Left Join / IS NULL poster, som er der i den ene tabel og ikke i den anden?

  2. I Python, hvis jeg har et unix-tidsstempel, hvordan indsætter jeg det så i et MySQL-dato-tidsfelt?

  3. Vælg Tidligste dato og klokkeslæt fra listen over forskellige brugersessioner

  4. TSQL:Hvordan konverteres lokal tid til UTC? (SQL Server 2008)