Requête SQL pour obtenir le nombre d'enregistrements en double en fonction d'autres facteurs

StackOverflow https://stackoverflow.com/questions/1429216

  •  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.

  1. Je souhaite pouvoir obtenir la liste de tous les ID utilisateur qui apparaissent plusieurs fois dans ce tableau. Comment puis-je m'y prendre?
  2. 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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top