SQL查询以根据其他因素获取重复记录计数

时间:2009-09-15 19:36:14

标签: sql duplicates field

我有一个表(参与者),它有多个列可以是不同的。 在此查询中特别感兴趣的两列是userID和programID 我在这里有两个问题。

  1. 我希望能够获取在此表中出现多次的所有userID的列表。我该怎么做呢?
  2. 我希望能够获取所有programID的计数,其中相同的userID出现在多个programID中。 (I.E.在2个程序中出现相同userID的程序数,3个程序中出现相同USErID的程序数等等)  例如:

     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
    

    预期结果:      userID count = 2;程序= 3      userID count = 3; program = 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
    

3 个答案:

答案 0 :(得分:2)

1

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

答案 1 :(得分: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和每个programID中相同userID出现的其他programID的数量。我认为您的预期结果对于您的样本数据是错误的。它应该是:

userID count = 1; program = 3; userID count = 2; program = 4; userID count = 3; program = 3;

如果您希望将结果微调以使其看起来更像您的预期结果,则可以将上述内容用作子查询(派生表)。

答案 2 :(得分:0)

这是我身上的一个问题,其逻辑步骤被遗漏了。