2017-01-31 20 views
2

I create this using the following:持つ複数のMAX値

SELECT genre, count(movie_id) FROM movies_genres 
GROUP BY genre 
ORDER BY count(movie_id) DESC; 

私の目標は、最初の2つのジャンルで最も現れる映画のジャンルを、持っていることです。 私は周りを検索し、ほとんどの回答は「LIMIT 1」を使用していますが、この場合はうまくいきません。 私はMAX()を試しましたが、ジャンルの列を表示する方法はわかりません。

ご連絡ください、ありがとうございます。

+0

の可能性のある重複した[SQLで "MAX" 値を持つすべての行を返す?](http://stackoverflow.com/questions/12167809/return-all-rows-with-max-value-in-sql) – shmosel

+0

@ GurV OPは*すべての*最大値を求めています。これは、任意の数の行にすることができます。 – shmosel

+0

@Sherry最終出力に必要な列は何ですか?同じ映画IDの複数のジャンルがありますか? – TRiNE

答えて

1

1つの方法は、countの最大値を見つけてhaving句を使用して、そのカウントを持つすべてのジャンルを取得することです。

select genre 
from movie_genres 
group by genre 
having count(movie_id) = (
    select max(cnt) 
    from (
     select count(movie_id) cnt 
     from movie_genres 
     group by genre 
    ) t 
) 
0

これはすべての値を指定しますか?最初にコレクションIDを作成します。そして、あなたが欲しいの出力を得るためにWHERE INを使用

SELECT genre FROM movie_genres 
WHERE movie_id IN (
    SELECT max(movie_id) FROM movies_genres 
    GROUP BY genre 
) 
0
SELECT genre,count(*) 
FROM movie_genres 
GROUP BY genre 
HAVING count(*) = (
    SELECT count(movie_id) 
    FROM movie_genres 
    GROUP BY genre 
    ORDER BY 1 DESC LIMIT 1 
) 

enter image description here

関連する問題