PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres - konwertuj pojedynczą tabelę w zgrupowanym drzewie JSON

W pewnym sensie struktura zapytania jest podobna do wyniku:

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.

Zauważ, że order by w agregatach nie są konieczne, ponieważ kolejność tablicy json jest niezdefiniowana. Dodałem je, aby uzyskać dokładnie oczekiwany rezultat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W migracji Rails, jak ustawić domyślną wartość kolumny na NOW() zamiast czasu uruchomienia migracji?

  2. Apache Felix nie może uzyskać dostępu do Postgres JDBC

  3. Automatyczne zatwierdzanie w Flask-SQLAlchemy

  4. Automatyzacja codziennych zadań PostgreSQL za pomocą Jenkins

  5. Zainstaluj PostgreSQL na Ubuntu 20.04