2009-12-02 2 views

ответ

24
SELECT col, count(*) 
    FROM tablethingie 
    GROUP BY col 
    ORDER BY count(*) DESC 
    LIMIT 10 
+0

FLAGGED мой ответ для удаления (-: Это возможно использовать count (col), а не count (*)? Hmm, и который более эффективен ... – Murph

+0

Ок, я думаю, вы первыми изменили mysql :-), я удаляю так и проголосовал за это. – Peter

+0

count (col) будет считать ненулевые значения. Так как col - это то, что мы группируем, то все равно. count (*) эквивалентно счету (1), но обычно рекомендуется по отношению к последнему. count (*) считается наиболее эффективным из всех, если это именно то, что вам нужно. –

2

Try:

SELECT ColName, Count(1) AS occurances 
    FROM 
     table 
    GROUP BY 
     ColName 
    ORDER BY 
     occurances DESC 
    LIMIT 
     10 
2

TOP является ключевым словом, которое не поддерживается в MySQL, то в MSSQL, хотя.

Это следующий запрос должен делать то, что вы хотите (не проверялось, но идея должна проясниться):

SELECT column, COUNT(*) AS matches 
FROM table 
GROUP BY column 
ORDER BY matches DESC 
LIMIT 10 
+0

Досрочно проголосовало против проголосовавшего; так как, насколько я могу судить, ваш ответ одинаково справедлив ко всем остальным. Я действительно желаю, чтобы нисходящие избиратели * объяснили * их нисходящие голоса. Таким образом мы можем чему-то научиться. –

+0

ricebowl, объяснил бы это? - http://stackoverflow.com/revisions/1831456/list - ответ был отредактирован, чтобы подражать другим после того, как был downvoted ;-) –

+0

Действительно, потому что я увидел ошибку в своем ответе, поэтому я исправил ее. Таким образом, предоставляются правильные ответы, а не неработающие. Сохранение высокого качества ответов на вопрос. – Ben

4

Попробуйте следующий код

SELECT colname, COUNT(*) AS cnt 
FROM tablename 
GROUP BY colname 
ORDER BY cnt DESC 
LIMIT 10 
Смежные вопросы