我有一个表示监督关系的递归表,一个人可以监督很多人,并得到其他人的监督。
这里有一个示例数据:
+--------+------------+ | 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(10.4.1)/ Mysql查询,给定一个节点,例如节点号1:
select largerId, amount from .... +-----------+--------+ | largerId | amount | +-----------+--------+ | 7 | 5 | +-----------+--------+
select .... where id = 1 +-----------+ | count(id) | +-----------+ | 15 | +-----------+
其他例子
select .... where id = 7 +-----------+ | count(id) | +-----------+ | 8 | +-----------+
这不需要递归,因为你只对直接孩子感兴趣。
对于第一个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;