Estoy tratando de encontrar los pares de los usuarios que disfrutan de la misma serie de programas de televisión en este ejemplo simplificado¿Cómo encuentro pares que comparten una propiedad (columna) a través de múltiples tuplas (filas)?
Digamos que tengo una tabla donde cada usuario tiene una entrada para cada programa de televisión que disfruten:
|USER | Show |
|-----|-------------|
|001 | Lost |
|001 | South Park |
|002 | Lost |
|003 | Lost |
|003 | South Park |
|004 | South Park |
|005 | Lost |
|006 | Lost |
entonces me gustaría resultado de:
|USER1 |USER2 |
|------|------|
|001 |003 |
|003 |001 |
|002 |005 |
|002 |006 |
|005 |002 |
|005 |006 |
|006 |002 |
|006 |005 |
o una versión aún mejor sería:
|USER1 |USER2 |
|------|------|
|001 |003 |
|002 |005 |
|002 |006 |
|005 |006 |
Lo que básicamente dice: Usuario 1 le gusta el mismo conjunto de programas como usuario 3.
He estado jugando con GROUP BY y unirse, pero todavía no puedo encontrar la respuesta :(.
Hasta ahora, he encontrado que el uso de
SELECT s1.User as USER1, s2.User as USER2, s1.Show as Show
FROM Shows s1 JOIN (SELECT * FROM Shows) s2
ON s1.Shows=s2.Shows AND s1.User!=s2.User;
que produce pares de usuarios y el espectáculo que tienen en común. Pero no sé a dónde ir desde aquí.
Muéstranos con lo que has estado jugando. – Kermit
Creo que el resultado esperado no coincide con los datos de muestra proporcionados. En los datos de muestra tiene 6 usuarios pero solo dos programas de TV y en el resultado esperado es viceversa. –
SELECT s1.User como Usuario1, Usuario2 s2.User, s1.Show Como demostración provenientes de los shows s1 UNEN (SELECT * \t provenientes de los shows) s2 EN s1.Shows = s2.Shows Y s1.User! = S2 .Usuario; Esto produce una lista de pares que le gusta al menos un mismo programa de TV. @DanielHilgarth Quiero encontrar pares de usuarios que miran TODOS los mismos programas de TV.El usuario 1 y el usuario 3 ven Lost y South Park. El usuario 2 y el usuario 5 ambos ven Lost. El usuario 2 y el usuario 6 ambos ven Lost. etc. –