0

我有一个表(参与者),它有多个列,这些列都可能是不同的。在这个查询中特别感兴趣的两列是 userID 和 programID 我在这里有一个两部分的查询。

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

     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 用户 ID 计数 = 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
4

3 回答 3

2

1.

select userID , SUM(userID ) AS Count 
from Preparations 
group by userID where Count > 1
于 2009-09-15T19:44:21.190 回答
0

这是我这边的一个问题,有一个逻辑步骤被遗漏了。

于 2009-10-28T17:18:22.183 回答
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 中出现相同 userID 的 programID 和其他 programID 的数量。我认为您的示例数据的预期结果是错误的。它应该是:

用户 ID 计数 = 1;程序 = 3; 用户 ID 计数 = 2;程序 = 4; 用户 ID 计数 = 3;程序 = 3;

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

于 2009-09-15T21:40:53.717 回答