Consulta SQL para obtener recuentos de registros duplicados en función de otros factores
-
07-07-2019 - |
Pregunta
Tengo una tabla (participantes) que tiene varias columnas que podrían ser distintas. Dos columnas que son de especial interés en esta consulta son la ID de usuario y la ID de programa Tengo una consulta de dos partes aquí.
- Deseo poder adquirir la lista de todos los ID de usuario que aparecen más de una vez en esta tabla. ¿Cómo hago para hacerlo?
-
Quiero poder adquirir el recuento de todos los ID de programa donde aparece el mismo ID de usuario en múltiples ID de programa. (I.E. recuento de programas donde aparece el mismo ID de usuario en 2 programas, recuento de programas donde aparece el mismo USErID en 3 programas, etc.) Por ejemplo:
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
Resultados esperados: ID de usuario cuenta = 2; programas = 3 ID de usuario cuenta = 3; programas = 3
¿Puede alguien ayudarme con esto?
mi código actual para la pregunta 1 es:
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
Solución 3
Este fue un problema de mi parte, con un paso lógico que se omitió.
Otros consejos
1.
select userID , SUM(userID ) AS Count
from Preparations
group by userID where Count > 1
Su consulta para la primera parte se ve bien. Aquí está su consulta para 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
Enumera el ID de programa y el número de otros ID de programa en los que aparece el mismo ID de usuario para cada ID de programa. Creo que sus resultados esperados son incorrectos para sus datos de muestra. Debería ser:
cuenta de ID de usuario = 1; programas = 3; ID de usuario cuenta = 2; programas = 4; ID de usuario cuenta = 3; programas = 3;
Puede usar lo anterior como una subconsulta (tabla derivada) si desea ajustar los resultados para que se parezcan más a los resultados esperados.