2016-11-14 30 views
0

我有2下表描述为这样:如何从SQL Server获取组排名列表(按成员计数排名)?

表成员

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

现在,我想TOP 10具有来自数据库的最多成员数量的组,我如何编写我的SQL查询?

请注意:

  1. 总成员数应包含群成员数

  2. 一组可cantain子组的无限级

    (如父 - - > subLv1> subLv2 ...。)

对于上面的例子中,所需的结果是:

Rank | GroupID | MemberCount 
1 | 102  | 3 
2 | 101  | 2 
3 | 105  | 2 
4 | 103  | 1 
5 | 104  | 1 
.... 
+1

编辑你的问题,并提供样本结果(和相应的样本数据)。 –

回答

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; 

然后,您可以添加限制的检索的记录数。

+0

TY,但似乎这个查询要求组只有1个子级别?我的组表定义了一个像树一样的嵌套组结构@FDavidov – ineztia

+0

你的意思是任何节点都应该包括子孙,孙子孙子,孙子孙子......的总数。 – FDavidov

+0

是的!对我来说这是一项艰巨的任务。 @FDavidov – ineztia