PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để đếm tất cả các nút (hàng) được kết nối trong một biểu đồ trên Postgres?

Bạn có thể sử dụng cte đệ quy:

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;

Tại đây là một 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. Thay thế giá trị trong trường trống sau khi sử dụng split_part

  2. CURSOR được tạo động trong Postgresql

  3. Bản ghi riêng biệt với các phép nối và thứ tự

  4. Cách kiểm tra xem một ô thuộc kiểu mảng số nguyên có chứa một giá trị nhất định trong SQL hay không

  5. Postregsql Ngày Chênh lệch trên cơ sở tính theo giây