2009-08-01 5 views
22

Моя таблица имеет две колонки: id и имя. Данные выглядит следующим образом:Выбрать лучшие результаты, упорядоченные по частоте

id | name 
---------- 
1 Jeff 
2 Sam 
3 Carl 
4 Sam 
5 Carl 
6 Jeff 
7 Dave 
8 Jeff 

То, что я хочу, чтобы получить это:

name | frequency 
---------------- 
Jeff  3 
Carl  2 
Sam  2 
Dave  1 

По существу, мне нужен запрос SQL, который подсчитывает уникальные имена в пределах таблицы, и сортирует их по frequnecy , Я использую MySQL, если это имеет значение.

Thank-you.

ответ

25

Я не проверял, поэтому синтаксис не может быть идеальным, но что-то вроде этого:

select name, count(*) as frequency 
from your_table 
group by name 
order by count(*) desc 

должны дать вам уникальные имена и соответствующее количество времени они appeat в таблице, упорядоченный по этому номеру

+1

Это сработало. Большое спасибо. – 2009-08-01 19:11:25

+1

Добро пожаловать :-) –

+0

Просто небольшое предложение о заказе может быть похоже на «заказ по частоте desc», а также – Elnoor

13

Вы должны использовать GROUP BY:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC; 

Это будет GROUP BYname (любой не-заполнитель столбцы должны быть указаны в предложении GROUP BY), а затем COUNT частота каждого name.

Если вы хотите только топ-25, вы можете продолжить, чтобы добавить пункт LIMIT как таковой:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC 
LIMIT 25; 

Более подробную информацию о предложении GROUP BY доступна в Руководстве по MySQL:

12.2.8 SELECT Syntax

+0

Спасибо, Андрей. Очень мило с твоей стороны. – 2009-08-01 19:29:31

Смежные вопросы