Запрос MariaDb/Mysql для подсчета узлов в дереве и поиска самого большого узла

У меня есть рекурсивная таблица, чтобы указать отношение надзора, где человек может контролировать многих людей и контролироваться многими другими людьми.

Вот пример данных:

+--------+------------+
| person | supervises |
+--------+------------+
|      1 |          2 |
|      1 |          3 |
|      1 |          4 |
|      1 |          7 |
|      3 |          5 |
|      4 |          5 |
|      5 |          8 |
|      4 |          6 |
|      4 |          7 |
|      6 |          9 |
|      7 |          9 |
|      9 |         14 |
|     14 |         15 |
|      3 |         15 |
|      7 |         10 |
|      7 |         11 |
|      7 |         12 |
|      7 |         13 |
+--------+------------+

Может быть представлен Запрос MariaDb/Mysql для подсчета узлов в дереве и поиска самого большого узла

Из которых синие узлы представляют большее поддерево, а красные узлы представляют корень большего дерева.

Моя проблема заключается в том, чтобы создать запрос MariaDb(10.4.1)/Mysql, который, учитывая узел, например узел номер 1:

  1. Возвращает корень с наибольшим количеством узлов
select largerId, amount from ....
+-----------+--------+
| largerId  | amount |
+-----------+--------+
|         7 |      5 |
+-----------+--------+
  1. Возвращает количество максимальных узлов в дереве (в этом случае количество равно 15)
select .... where id = 1

+-----------+
| count(id) |
+-----------+
|        15 |
+-----------+

другой пример

select .... where id = 7

+-----------+
| count(id) |
+-----------+
|         8 |
+-----------+
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не требует рекурсии, поскольку вас интересуют только прямые дети.

Для первого GROUP BY person и ограничьте результат верхней строкой в ​​порядке убывания.

SELECT person,
       count(*)
       FROM elbat
       GROUP BY person
       ORDER BY count(*) DESC
       LIMIT 1;

Для второго посчитайте UNION всех значений person и supervises.

SELECT count(*)
       FROM (SELECT supervises
                    FROM elbat
             UNION
             SELECT person
                    FROM elbat) x;

дб <> рабочий пример

Другие вопросы по теме