2011-10-22 14 views
31

tengo esta tabla:MySQL grupo de recuento por tener

Movies (ID, Genre) 

Una película puede tener múltiples géneros, por lo que un ID no es específico de un género, es una relación muchos a muchos. Quiero una consulta para encontrar el número total de películas que tienen exactamente 4 géneros. La consulta actual que tengo es

SELECT COUNT(*) 
    FROM Movies 
GROUP BY ID 
    HAVING COUNT(Genre) = 4 

Sin embargo, esto me devuelve una lista de 4 en lugar de la suma total. ¿Cómo obtengo la suma total en lugar de una lista de count(*)?

Respuesta

61

Una forma sería utilizar una consulta anidada:

SELECT count(*) 
FROM (
    SELECT COUNT(Genre) AS count 
    FROM movies 
    GROUP BY ID 
    HAVING (count = 4) 
) AS x 

La consulta interna recibe todas las películas que tienen exactamente 4 géneros, entonces externa consulta cuenta cuántas filas devolvió la consulta interna.

2

Tal

SELECT count(*) FROM (
    SELECT COUNT(*) FROM Movies GROUP BY ID HAVING count(Genre) = 4 
) AS the_count_total 

aunque eso no sería la suma de todas las películas, cuántos tienen 4 del género.

Así que tal vez quieren

SELECT sum(
    SELECT COUNT(*) FROM Movies GROUP BY ID having Count(Genre) = 4 
) as the_sum_total 
+0

estoy bastante seguro de que no va a funcionar –

+0

¿qué hay de la segunda versión? –

+0

también actualicé el primer –

6
SELECT COUNT(*) 
FROM (SELECT COUNT(*) 
     FROM movies 
     GROUP BY id 
     HAVING COUNT(genre) = 4) t 
1

¿Qué hay de:

SELECT COUNT(*) FROM (SELECT ID FROM Movies GROUP BY ID HAVING COUNT(Genre)=4) a