Выберите лучшие результаты, упорядоченные по частоте
Моя таблица имеет два столбца: 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, если это имеет значение.
Благодарственные.
Ответы
Ответ 1
Я не тестировал его, поэтому синтаксис может быть не идеальным, но как насчет этого:
select name, count(*) as frequency
from your_table
group by name
order by count(*) desc
Должны указывать уникальные имена и соответствующее количество времени, которое они притягивают в таблице, упорядочиваясь по этому номеру
Ответ 2
Вам нужно использовать GROUP BY
:
SELECT name, COUNT(*) as frequency
FROM name_table
GROUP BY name
ORDER BY COUNT(*) DESC;
Это будет GROUP BY
name
(любые неагрегатные столбцы должны быть названы в предложении 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