2011-10-05 27 views
5

digamos que lo que sigue es mi mesa¿Cómo obtengo el número de filas que tienen columnas duplicadas?

id | name | topic | reply 
... 
1 | user1 | 00001 | yes    ## replied on topic 00001 
2 | user2 | 00002 | yes    ** replied on topic 00002 
3 | user1 | 00001 | yes    ## replied on topic 00001 
4 | user5 | 00001 | no 
5 | user1 | 00001 | yes    ## replied on topic 00001 
6 | user1 | 00002 | no 
7 | user2 | 00002 | yes    ** replied on topic 00002 
8 | user3 | 00001 | no 
9 | user4 | 00002 | yes 

imaginar que esto es una mesa de tema. Solo usuario1 y usuario responden en un solo tema más de una vez (tema 00001 y 00002) ¿Cómo puedo seleccionar el número de usuario que responde sobre un tema más de una vez, que debe devolver 2 de 5

Respuesta

3

Esto le dará el número de usuarios que han respondido más de una vez sobre un tema:

SELECT COUNT(DISTINCT name) 
FROM (
    SELECT name 
    FROM yourtable 
    WHERE reply = 'yes' 
    GROUP BY name, topic 
    HAVING COUNT(*) > 1 
) T1 
+0

Wow, gracias hombre. Tendría que dedicar un día a escribir este tipo de consulta por mi cuenta. :) –

3

primer lugar usted necesita para calcular el número de respuestas por usuario al tema y luego contar el número de usuarios distintos que tienen más de una respuesta de cualquier tema.

SELECT COUNT(DISTINCT name) FROM (
    SELECT name, topic, count(*) replies 
    FROM table 
    WHERE reply = 'yes' 
    GROUP BY name, topic 
) a 
WHERE replies > 1 
+0

@MarkByers, gracias. –

Cuestiones relacionadas