web-dev-qa-db-ja.com

持つことによってmysqlカウントグループ

私はこの表を持っています:

_Movies (ID, Genre)
_

映画は複数のジャンルを持つことができるため、IDはジャンルに固有ではなく、多対多の関係です。ちょうど4つのジャンルの映画の総数を検索するクエリが必要です。私が持っている現在のクエリは

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

ただし、これは合計ではなく4のリストを返します。 count(*)のリストの代わりに総計を取得するにはどうすればよいですか?

40
Michael Liao

1つの方法は、ネストされたクエリを使用することです。

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

内部クエリは正確に4つのジャンルを持つすべての映画を取得し、外部クエリは内部クエリが返した行数をカウントします。

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

多分

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

これはすべての映画の合計ではありませんが、4つのジャンルを持っているのはどれだけですか。

だから多分あなたが欲しい

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

どうですか:

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