Zadanie "konkursowe" z baz danych.

0

Cześć, nasz prowadzący od baz danych dał nam zadanie konkursowe. Mamy posortować węzły grafu skierowanego pod względem ilości jego połączeń bezpośrednich i ilości jego połączeń po n krokach. Z połączeniami bez pośrednimi sobie poradziłem ale dla n kroku nie mam pojęcia z czego skorzystać.
Macie może jakieś wskazówki? Coś co może mnie naprowadzić na rozwiązanie?

Oto co udało mi się wypocić do tej pory:

create database connections
use connections
create table connectionsMap(
OD char,
DO char
)

insert into connectionsMap values('A','B')
insert into connectionsMap values('A','C')
insert into connectionsMap values('A','D')
insert into connectionsMap values('B','F')
insert into connectionsMap values('D','F')
insert into connectionsMap values('F','G')
insert into connectionsMap values('G','H')
insert into connectionsMap values('H','I')
insert into connectionsMap values('I','B')
insert into connectionsMap values('C','E')
insert into connectionsMap values('E','C')
insert into connectionsMap values('E','A')

--Węzły "znające" najwięcej węzłów bezpośrednio

Select Od,count(Od) as Od_count 
from connectionsMap
group by Od
order by Od_count DESC

--Węzły najbardziej "znane" bezpośrednio

Select Do,count(Do) as Do_count 
from connectionsMap
group by Do
order by Do_count DESC
0

Połączenia bezpośrednie = 1 połączenie.
1 połączenie - jeden JOIN tabeli z samą sobą (odpowiedni JOIN - nie podpowiem jaki).
n połączeń - analogicznie.
Na tym wszystkim GROUP BY i Count().
Proste.
EDIT:
Właściwie, to dla 1 połączenia, nie trzeba żadnego JOINa.
Dla 2 - 1 JOIN.
Dla n - (n-1) JOINów

0

Jeżeli to oracle to polecam tak jak kolega pisał wcześniej złączenie ze samym sobą używając do tego funkcji

CONNECT BY PRIOR

1 użytkowników online, w tym zalogowanych: 0, gości: 1