如何从SQL Server获取组排名列表(按成员计数排名)?

时间:2016-11-14 13:07:58

标签: sql 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
......

现在我想让来自DB的成员数量最多的 TOP 10 组,我该如何编写SQL查询?

请注意:

  1. 总成员数应包含子组成员数

  2. 一个群体可以包含无限级别的子群组(例如,父级 - > subLv1 - > subLv2 ...)

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

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

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;

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