consulta SQL para obter a contagem registro duplicado com base em outros fatores
-
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.
- 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?
-
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
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.