他の要因に基づいて重複レコード数を取得するSQLクエリ
-
07-07-2019 - |
質問
私はテーブル(参加者)に複数の列があり、それらはすべて別個のものである場合があります。 このクエリで特に重要な2つの列は、userIDとprogramIDです。 ここには2つの部分のクエリがあります。
- このテーブルに複数回表示されるすべてのユーザーIDのリストを取得できるようにします。どうやってやるの?
-
同じuserIDが複数のprogramIDにあるすべてのprogramIDのカウントを取得できるようにしたい。 (つまり、2つのプログラムに同じユーザーIDが表示されるプログラムの数、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カウント= 2;プログラム= 3 userIDカウント= 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
これは私の側の問題であり、論理ステップは省略されました。
他のヒント
1。
select userID , SUM(userID ) AS Count
from Preparations
group by userID where Count > 1
パート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
プログラムIDと、各プログラムIDに同じユーザーIDが表示される他のプログラムIDの数がリストされます。サンプルデータに対して期待される結果は間違っていると思います。次のようになります。
userID count = 1;プログラム= 3; userIDカウント= 2;プログラム= 4; userIDカウント= 3;プログラム= 3;
期待される結果のように結果を微調整する場合は、上記をサブクエリ(派生テーブル)として使用できます。
所属していません StackOverflow