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

Jak policzyć wszystkie połączone węzły (wiersze) na wykresie w Postgresie?

Możesz użyć rekurencyjnego cte:

with recursive t(account_id, device_id) as (
       select 1, 10 union all
       select 1, 11 union all
       select 1, 12 union all
       select 2, 10 union all
       select 3, 11 union all
       select 3, 13 union all
       select 3, 14 union all
       select 4, 15 union all
       select 5, 15 union all
       select 6, 16
     ),
     a as (
      select distinct t.account_id as a, t2.account_id as a2
      from t join
           t t2
           on t2.device_id = t.device_id and t.account_id >= t2.account_id
     ),
     cte as (
      select a.a, a.a2 as mina
      from a
      union all
      select a.a, cte.a
      from cte join
           a
           on a.a2 = cte.a and a.a > cte.a
     )
select grp, array_agg(a)
from (select a, min(mina) as grp
      from cte
      group by a
     ) a
group by grp;

Tutaj to skrzypce SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć kontener aplikacji webowej Docker z kontenerem Docker PostgreSQL?

  2. PostgreSQL:od OID do Bajta

  3. Czy procedury składowane działają w transakcji bazy danych w Postgresie?

  4. BŁĄD:wartość null w kolumnie id narusza ograniczenie o wartości null

  5. jak postgres radzi sobie z bitowym typem danych?