2009-09-15 26 views
0

我有一個表(參與者)有多個列可能都是不同的。 這個查詢中特別感興趣的兩列是用戶ID和程序ID 我在這裏有兩部分查詢。SQL查詢獲取基於其他因素的重複記錄計數

  1. 我希望能夠獲取在此表中多次出現的所有用戶標識的列表。我該如何去做呢?
  2. 我想要能夠獲取所有節目ID的計數,其中相同的用戶ID出現在多個節目ID中。 (即節目數,其中相同的用戶ID顯示在2個節目,節目的計數,其中相同的USERID出現在3個節目,等...) 例如:

    programID: prog1 
        userID: uid1 
        userID: uid3 
        userID: uid12 
    programID: prog2 
        userID: uid3 
        userID: uid5 
        userID: uid14 
        userID: uid27 
    programID: prog3 
        userID: uid3 
        userID: uid7 
        userID: uid14 
        userID: uid30 
    programID: prog4 
        userID: uid1 
    

    預期結果: 用戶ID計數= 2;程序= 3 userID count = 3;程序= 3

任何人都可以請幫助我這個。

我的問題1當前的代碼:

SELECT 
    WPP.USERID, 
    WPI.EMAIL, 
    WPI.FIRSTNAME, 
    WPI.LASTNAME, 
    WPI.INSTITUTION 
    FROM WEBPROGRAMPARTICIPANTS WPP 
    INNER JOIN WEBPERSONALINFO WPI 
    ON WPP.USERID = WPI.USERID 
    INNER JOIN WEBPROGRAMS WP 
    ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE 
    WP.PROGRAMTYPE IN ('1','2','3','4','5','6', '9', '10') 
    GROUP BY 
    WPP.USERID, 
    WPI.EMAIL, 
    WPI.FIRSTNAME, 
    WPI.LASTNAME, 
    WPI.INSTITUTION 
    HAVING COUNT(WPP.USERID) > 1 
    ORDER BY WPI.EMAIL 

回答

0

這是一個問題在我身邊,邏輯步驟被遺漏了。

2

1.

select userID , SUM(userID) AS Count 
from Preparations 
group by userID where Count > 1 
+2

我相信它應該是COUNT(userID)AS計數。 –

0

您的部分查詢一個看起來不錯。這是你的第2部分查詢:

SELECT DISTINCT p1.programID, COUNT(p1.userID) AS Multiple 
FROM participants p1 
JOIN participants p2 ON p2.userID = p1.userID 
GROUP BY p1.userID, programID 
ORDER BY Multiple, programID 

它列出programID和相同的用戶ID出現在每個programID其他programIDs的數量。我認爲你的預期結果對於你的樣本數據是錯誤的。它應該是:

userID count = 1;程序= 3; userID count = 2;程序= 4; userID count = 3;程序= 3;

如果您想微調結果使其看起來更像您的預期結果,那麼您可以使用上述作爲子查詢(派生表)。