52 votes

mysql count group en ayant

j'ai ce tableau :

 Movies (ID, Genre)

Un film peut avoir plusieurs genres, donc un identifiant n'est pas spécifique à un genre, c'est une relation plusieurs à plusieurs. Je veux une requête pour trouver le nombre total de films qui ont exactement 4 genres. La requête actuelle que j'ai est

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

Cependant, cela me renvoie une liste de 4 au lieu de la somme totale. Comment obtenir la somme totale au lieu d'une liste de count(*) ?

88voto

Marc B Points 195501

Une façon serait d'utiliser une requête imbriquée :

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

La requête interne obtient tous les films qui ont exactement 4 genres, puis la requête externe compte le nombre de lignes renvoyées par la requête interne.

6voto

Conrad Frix Points 34272
SELECT COUNT(*) 
FROM   (SELECT COUNT(*) 
        FROM   movies 
        GROUP  BY id 
        HAVING COUNT(genre) = 4) t

3voto

Michael Durrant Points 30342

Peut-être

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

bien que ce ne soit pas la somme de tous les films, combien ont 4 genres.

Alors peut-être que tu veux

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

1voto

imm Points 3576

Qu'en est-il de:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X