web-dev-qa-db-fra.com

mysql compte groupe en ayant

J'ai cette table:

Movies (ID, Genre)

Un film peut avoir plusieurs genres, de sorte qu'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 puis-je obtenir la somme totale au lieu d'une liste de count(*)?

40
Michael Liao

Une solution 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 ayant exactement 4 genres, puis la requête externe compte le nombre de lignes renvoyées par la requête interne.

73
Marc B
SELECT COUNT(*) 
FROM   (SELECT COUNT(*) 
        FROM   movies 
        GROUP  BY id 
        HAVING COUNT(genre) = 4) t
6
Conrad Frix

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
2
Michael Durrant

Qu'en est-il de:

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