2011-12-22 7 views
4

moviesというテーブルとmovie_idという名前の列があります。そして、私は表の中で最も一般的に発生するようにしたいですmovie_id。カラム内のSQLは、最も多くの行を含む列からデータを取得します

例データ:

movie_id 
234 
343 
2928 
956 
73 
234 
234 

それはほとんどの行を持っているので、それで結果は、234でなければなりません。私はこれを試みたことがないので、これがどのように達成されるのか本当に分かりません。 SQLに応じて

+1

どのSQL-product? MySQL、SQLサーバ、Postgres、Oracle? –

+0

@EugenRieck、それは大きくはない、他の数よりも234が多い。 –

+0

それほど大きくはない、私はそれが値の数であると思う、私は234回3回参照。 –

答えて

4

は、私はあなたが探しているものを正しく理解していれば、ある

SELECT * FROM movies 
WHERE 
movie_id=(SELECT movie_id FROM movies GROUP BY movie_id ORDER BY count(*) DESC LIMIT 1) 

のようなものかもしれません。 MySQLの

+0

私はこれを試してみることになります。 – dumbel

3

:SQL-Serverの場合

SELECT movie_id 
FROM movies 
GROUP BY movie_id 
ORDER BY COUNT(*) DESC 
LIMIT 1 

SELECT TOP 1 
    movie_id 
FROM movies 
GROUP BY movie_id 
ORDER BY COUNT(*) DESC 

あなたはすべての映画が返される(上部に)縛られたい場合:

SELECT movie_id 
FROM movies 
GROUP BY movie_id 
HAVING COUNT(*) = 
    (SELECT TOP 1 COUNT(*) 
     FROM movies 
     GROUP BY movie_id 
     ORDER BY COUNT(*) DESC 
    ) 
+2

+1、しかし結束したすべての映画が必要な場合は、 'WITH TIES'を'あなたの2番目の質問に「トップ1」を追加します。 –

0
SELECT movie_id FROM (
    SELECT 
    movie_id, 
    count(*) AS num 
    FROM <tablename> 
    GROUP BY movie_id 
) AS baseview 
ORDER BY num DESC 
LIMIT 1 
0

SQLサーバー使用:

SELECT TOP 1 COUNT(*) as cnt 
FROM movies 
GROUP BY(movie_id) 
ORDER BY cnt DESC 
関連する問題