Query SQL per ottenere conteggi duplicati dei record in base ad altri fattori
-
07-07-2019 - |
Domanda
Ho una tabella (partecipanti) che ha più colonne che potrebbero essere tutte distinte. Due colonne di particolare interesse in questa query sono userID e programID Ho una domanda in due parti qui.
- Voglio essere in grado di acquisire l'elenco di tutti gli ID utente che compaiono più di una volta in questa tabella. Come faccio a farlo?
-
Voglio essere in grado di acquisire il conteggio di tutti gli ID programma in cui lo stesso ID utente appare in più ID programma. (Conteggio I.E. dei programmi in cui appare lo stesso ID utente in 2 programmi, conteggio dei programmi in cui lo stesso USErID appare in 3 programmi, ecc.) Ad esempio:
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
Risultati attesi: userID count = 2; programmi = 3 userID count = 3; programmi = 3
Qualcuno può aiutarmi per favore con questo.
il mio codice attuale per la domanda 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
Soluzione 3
Questo è stato un problema dalla mia parte, con un passo logico che è stato lasciato fuori.
Altri suggerimenti
1.
select userID , SUM(userID ) AS Count
from Preparations
group by userID where Count > 1
La tua richiesta per la prima parte sembra buona. Ecco la tua domanda per la parte 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
Elenca ID programma e il numero di altri ID programma in cui appare lo stesso ID utente per ciascun ID programma. Penso che i risultati previsti siano errati per i dati di esempio. Dovrebbe essere:
conteggio ID utente = 1; programmi = 3; userID count = 2; programmi = 4; userID count = 3; programmi = 3;
È possibile utilizzare quanto sopra come sottoquery (tabella derivata) se si desidera ottimizzare i risultati in modo che assomiglino maggiormente ai risultati previsti.