2013-08-01 55 views
-1

我有一個表Mbr,其中包含3個字段,GroupType,LeaderIDMemberID。基本上,組織中的所有成員被劃分爲這些組,由他們的領導者的唯一IDLeaderID)標識。每個成員記錄也有自己的MemberID,領導者本身也有獨特的MemberIDGroupType只是指定一個成員在哪個組中被認爲是Large,SmallIndividual組。SQL計數和組按問題

我需要找出每個GroupType有多少組包含一定數量的成員。
例如:

  • 團體多少含有6名成員,7個成員,8名成員,9等。
  • 多少個小組包含2個成員,3個成員,4個成員和5個成員
  • 有多少個人小組。

是否有可能進行查詢,以獲得獨特MemberID的計數的每個group,然後拿到多少LeaderID一個COUNT的有一定數量與之關聯的成員?

+0

請確定您使用的是哪種DBMS系統 –

+0

某些樣本數據和樣本輸出在這裏有很長的路要走。 –

回答

0

注意:由於您沒有指定您正在使用哪個DBMS,我試圖做一個基本的查詢。在SQLServerOracle這可以更優雅。

我假設給定Member可以只有一個Group如果這是正確的Leader領導者,

問題1:

SELECT GroupType, NumberOfMembers, COUNT(LeaderID) AS NumberOfGroups 
FROM (
    SELECT GroupType, LeaderID, COUNT(*) AS NumberOfMembers 
    FROM MyTable 
    GROUP BY GroupType, LeaderID 
) AS InnerGrouping 
GROUP BY GroupType, NumberOfMembers 
ORDER BY GroupType, NumberOfMembers 

問題2:

SELECT UniqueMemberIDPerGroup, COUNT(LeaderID) AS NumberOfLeaderID 
FROM ( 
    SELECT LeaderID, COUNT(DISTINCT MemberID) AS UniqueMemberIDPerGroup 
    FROM MyTable 
    GROUP BY LeaderID 
) AS InnerGrouping 
GROUP BY UniqueMemberIDPerGroup 
+0

MemberID可能不止一次列出,但我只想計算唯一的出現次數。這只是一個問題,對不起,如果最後一部分有點笨拙。 – hokaboka

+0

非常感謝你的完美工作。 – hokaboka

0

我相信你可以用幾個子查詢編寫一些複雜的查詢來創建一個查詢來給你你想要的,但我個人喜歡更直接的方法。在這種情況下,它將使用一些臨時表來存儲中間值。我將首先按幾列(您打算用作標準)進行分組,計數是查詢的值。然後我將它們存儲到臨時表中,最後創建一個查詢來利用臨時表爲您提供您正在查找的結果。