0

私は、すべてが異なる可能性のある複数の列を持つテーブル(参加者)を持っています。このクエリで特に重要な2つの列は、userIDとprogramIDです。ここでは2つの部分からなるクエリがあります。

  1. このテーブルに複数回表示されるすべてのユーザーIDのリストを取得できるようにしたい。どうすればそれを行うことができますか?
  2. 複数のprogramIDに同じuserIDが含まれているすべてのprogramIDの数を取得できるようにしたい。(IE 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; プログラム=3userIDカウント=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.1。

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

パート1のクエリは良さそうです。パート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カウント=1; プログラム=3; userIDカウント=2; プログラム=4; userIDカウント=3; プログラム=3;

結果を期待どおりの結果に近づけるように微調整する場合は、上記をサブクエリ(派生テーブル)として使用できます。

于 2009-09-15T21:40:53.717 に答える
0

これは私の側の問題であり、論理的なステップが省略されていました。

于 2009-10-28T17:18:22.183 に答える