반응형
그래프의 최대 깊이에 대한 MariaDb 쿼리
저는 감독의 관계를 나타내는 재귀적인 표를 가지고 있는데, 한 사람이 많은 사람들을 감독하고 다른 사람들에게 감독을 받을 수 있습니다.
다음은 예제 데이터입니다.
+--------+------------+사람 | 감독 |+--------+------------+| 1 | 2 || 1 | 3 || 1 | 4 || 3 | 5 || 4 | 5 || 5 | 8 || 4 | 6 || 4 | 7 || 6 | 9 || 7 | 9 || 9 | 10 || 10 | 11 || 3 | 11 |+--------+------------+
다음으로 나타낼 수 있습니다. 이 중 색상이 지정된 노드는 최대 깊이의 경로를 나타냅니다.
문제는 경로를 포함하는 행을 반환하는 MariaDb(10.4.1)/Mysql 쿼리를 만드는 것입니다. 이 경우 1, 4, 6, 9, 10, 11 또는 1, 4, 7, 9, 10, 11과 같은 키를 포함하는 행을 반환합니다.
선택... +------+경로 |+------+| 1 || 4 || 6 || 9 || 10 || 11 |+------+
가능한 모든 경로와 깊이를 반환합니다.
with recursive rcte as (
select person, supervises,
concat(person, ',', supervises) as path,
1 as depth
from graph
union all
select r.person, g.supervises,
concat(r.path, ',', g.supervises),
r.depth + 1
from graph g
join rcte r on r.supervises = g.person
)
select *
from rcte
order by person, supervises
결과:
person | supervises | path | depth
-------|------------|---------------|------
1 | 2 | 1,2 | 1
1 | 3 | 1,3 | 1
1 | 4 | 1,4 | 1
1 | 5 | 1,3,5 | 2
1 | 5 | 1,4,5 | 2
1 | 6 | 1,4,6 | 2
1 | 7 | 1,4,7 | 2
1 | 8 | 1,4,5,8 | 3
1 | 8 | 1,3,5,8 | 3
1 | 9 | 1,4,6,9 | 3
1 | 9 | 1,4,7,9 | 3
1 | 10 | 1,4,7,9,10 | 4
1 | 10 | 1,4,6,9,10 | 4
1 | 11 | 1,4,6,9,10,11 | 5
1 | 11 | 1,3,11 | 2
1 | 11 | 1,4,7,9,10,11 | 5
3 | 5 | 3,5 | 1
3 | 8 | 3,5,8 | 2
3 | 11 | 3,11 | 1
4 | 5 | 4,5 | 1
4 | 6 | 4,6 | 1
4 | 7 | 4,7 | 1
4 | 8 | 4,5,8 | 2
4 | 9 | 4,6,9 | 2
4 | 9 | 4,7,9 | 2
4 | 10 | 4,6,9,10 | 3
4 | 10 | 4,7,9,10 | 3
4 | 11 | 4,6,9,10,11 | 4
4 | 11 | 4,7,9,10,11 | 4
5 | 8 | 5,8 | 1
6 | 9 | 6,9 | 1
6 | 10 | 6,9,10 | 2
6 | 11 | 6,9,10,11 | 3
7 | 9 | 7,9 | 1
7 | 10 | 7,9,10 | 2
7 | 11 | 7,9,10,11 | 3
9 | 10 | 9,10 | 1
9 | 11 | 9,10,11 | 2
10 | 11 | 10,11 | 1
최대 깊이를 얻으려면 다음을 사용합니다.
select max(depth) from rcte
언급URL : https://stackoverflow.com/questions/55442382/mariadb-query-for-max-depth-in-graph
반응형
'source' 카테고리의 다른 글
PythonTypeError: 형식 문자열에 대한 인수가 부족합니다. (0) | 2023.08.15 |
---|---|
$.jSON이 IE8에서 캐시된 데이터를 반환합니다. (0) | 2023.08.15 |
수동 저장 시 IntelliJ IDEA 봄 부트 핫 새로고침? (0) | 2023.08.15 |
결제 게이트웨이에 대한 안내가 필요합니다. (0) | 2023.08.15 |
alembic.ini 외부에 alembic 연결 문자열을 저장할 수 있습니까? (0) | 2023.08.10 |