Consulta SQL para obtener recuentos de registros duplicados en función de otros factores

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

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

  1. 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?
  2. 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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top