MariaDb / Mysql查询计算树中的节点并查找最大节点[关闭]

问题描述 投票:0回答:1

我有一个表示监督关系的递归表,一个人可以监督很多人,并得到其他人的监督。

这里有一个示例数据:

+--------+------------+
| 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 |
+--------+------------+

可以用Recursive table representation代表

其中,蓝色节点表示较大的子树,红色节点表示较大树的根。

我的问题是,创建一个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 |
+-----------+
mysql graph mariadb recursive-query
1个回答
0
投票

这不需要递归,因为你只对直接孩子感兴趣。

对于第一个GROUP BY person并将结果限制为由计数降序排序的顶行。

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

对于第二个计算UNIONperson的所有值的supervises

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

db<>fiddle

© www.soinside.com 2019 - 2024. All rights reserved.