PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menghitung semua node (baris) yang terhubung dalam grafik di Postgres?

Anda dapat menggunakan cte rekursif:

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;

Di sini adalah SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara tercepat untuk mengambil data sekuensial dari database?

  2. Dapatkan anak terbaru per orang tua dari tabel besar - kueri terlalu lambat

  3. Memasukkan angka floating point dalam tabel menggunakan libpq

  4. Bagaimana cara menghindari karakter tanda tanya (?) dengan Spring JpaRepository

  5. Salin hasil dari tampilan PostgreSQL di satu DB ke tabel di yang lain