Requête SQL pour obtenir le nombre d'enregistrements en double en fonction d'autres facteurs
-
07-07-2019 - |
Question
J'ai une table (participants) qui comporte plusieurs colonnes qui pourraient toutes être distinctes. Les deux colonnes présentant un intérêt particulier dans cette requête sont l'ID utilisateur et l'ID programme. J'ai une enquête en deux parties ici.
- Je souhaite pouvoir obtenir la liste de tous les ID utilisateur qui apparaissent plusieurs fois dans ce tableau. Comment puis-je m'y prendre?
-
Je souhaite pouvoir obtenir le nombre de tous les ID de programme où le même ID d'utilisateur apparaît dans plusieurs ID de programme. (Nombre I.E. de programmes où le même ID utilisateur apparaît dans 2 programmes, nombre de programmes où le même USErID apparaît dans 3 programmes, etc.) Par exemple:
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
Résultats attendus: compte d'utilisateur = 2; programmes = 3 nombre d'utilisateurs = 3; programmes = 3
Quelqu'un peut-il m'aider, s'il vous plaît?
mon code actuel pour la question 1 est:
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
La solution 3
C’était un problème de mon côté, avec une étape logique laissée de côté.
Autres conseils
1.
select userID , SUM(userID ) AS Count
from Preparations
group by userID where Count > 1
Votre requête pour la première partie est bonne. Voici votre requête pour la partie 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
Il répertorie l'ID de programme et le nombre d'autres ID de programme dans lesquels le même ID d'utilisateur apparaît pour chaque ID de programme. Je pense que vos résultats attendus sont erronés pour vos échantillons de données. Ce devrait être:
userID count = 1; programmes = 3; compte d'utilisateur = 2; programmes = 4; nombre d'utilisateurs = 3; programmes = 3;
Vous pouvez utiliser ce qui précède comme sous-requête (table dérivée) si vous souhaitez affiner les résultats pour qu'ils ressemblent davantage aux résultats attendus.