2011-12-22 2 views
4

У меня есть таблица с именем movies и столбец с именем movie_id. И я хочу получить наиболее часто встречающийся movie_id в таблице.SQL извлекает данные из столбца с наибольшим количеством строк в

Пример данные в колонке:

movie_id 
234 
343 
2928 
956 
73 
234 
234 

Таким образом, результат должен быть 234, поскольку он имеет наибольшее количество строк. Я никогда не пробовал этого, поэтому я действительно не знаю, как это можно достичь.

+1

Для чего SQL-продукт? MySQL, SQL-Server, Postgres, Oracle? –

+0

@ EugenRieck, он не больше, их больше 234, чем других чисел. –

+0

Не больше, я думаю, что это количество значений, я вижу 234 в 3 раза –

ответ

4

в зависимости от SQL может быть что-то вроде

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

, то есть, если я правильно понял, что вы ищете.

+0

Я попробую это из благодарности – dumbel

3

Для MySQL:

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

Для SQL-сервера:

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' после ' TOP 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 
Смежные вопросы