Zadanie "konkursowe" z baz danych.

Zadanie "konkursowe" z baz danych.
Stadzior
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
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:

Kopiuj
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
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
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

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1617
0

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

Kopiuj
CONNECT BY PRIOR

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.