PostgreSQL
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете записи въз основа на последната дата

  2. PostgreSQL:Цикъл, докато дадено условие е вярно

  3. Postgresql присвоява заявка за избор на променлива във функцията

  4. Кръстосана таблица с голям или неопределен брой категории

  5. Npgsql с Pgbouncer на Kubernetes - обединяване и поддържане на активност