consulta SQL para obter a contagem registro duplicado com base em outros fatores

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

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma tabela (participantes), que tem várias colunas que tudo poderia ser diferente. Duas colunas que são de interesse especial nesta consulta são o ID do usuário ea programID Eu tenho um inquery duas partes aqui.

  1. Eu quero ser capaz de adquirir a lista de todos os IDs que aparecem mais de uma vez nesta tabela. Como faço para ir sobre fazê-lo?
  2. Eu quero ser capaz de adquirir a contagem de todos programID de onde o mesmo ID do usuário aparece em vários programIDs. (Ou seja, contar de programas onde mesmo ID do usuário aparece em 2 programas, a contagem de programas onde mesmo ID do usuário aparece em 3 programas, etc ...) Por Exemplo:

     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: userId count = 2; programas = 3 userId count = 3; programas = 3

Alguém por favor pode me ajudar com isso.

meu código atual para a pergunta 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
Foi útil?

Solução 3

Este era um problema do meu lado, com uma etapa lógica que foi deixado de fora.

Outras dicas

1.

select userID , SUM(userID ) AS Count 
from Preparations 
group by userID where Count > 1

A sua consulta para uma parte parece ser bom. Aqui está a sua consulta para a 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

Ele lista programID eo número de outros programIDs que o mesmo ID do usuário aparece em para cada programID. Eu acho que os resultados esperados estão errados para seus dados de amostra. Ele deve ser:

userID count = 1; programas = 3; userId count = 2; programas = 4; userId count = 3; programas = 3;

Você pode usar o acima como uma subconsulta (tabela derivada) se você quiser afinar os resultados para se parecer mais com os resultados esperados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top