我有两个表格如下:
表成员
MemberID | GroupID
1 | 101
2 | 104
3 | 107
4 | 102
5 | 103
6 | 104
7 | 105
8 | 106
......
表组(组嵌套)
GroupID | ParentID
101 | NULL
102 | NULL
103 | 111
104 | 101
105 | 102
106 | 105
107 | NULL
......
现在我想让来自DB的成员数量最多的 TOP 10 组,我该如何编写SQL查询?
请注意:
总成员数应包含子组成员数
一个群体可以包含无限级别的子群组(例如,父级 - > subLv1 - > subLv2 ...)
对于上面的例子,所需的结果是:
Rank | GroupID | MemberCount
1 | 102 | 3
2 | 101 | 2
3 | 105 | 2
4 | 103 | 1
5 | 104 | 1
....
答案 0 :(得分:0)
试试这个(语法没有完全检查):
SELECT GROUP_ID, SUM(Y) AS Z
FROM ( SELECT GroupID AS GROUP_ID, COUNT(*) AS Y
FROM MEMBER
GROUP BY GroupID
UNION
SELECT ParentID AS GROUP_ID, COUNT(*) AS Y
FROM GROUP
GROUP BY ParentID
)
GROUP BY GROUP_ID
ORDER BY Z DESC;
然后,您可以为检索的记录数添加限制。