2016-11-14 81 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