MySQL: подсчитать вхождения значений DISTINCT

192

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

пример дб

id         name
-----      ------
1          Mark
2          Mike
3          Paul
4          Mike
5          Mike
6          John
7          Mark

ожидаемый результат

name       count
-----      -----
Mike       3
Mark       2
Paul       1
John       1

Спасибо

Теги:
database
distinct

3 ответа

359
Лучший ответ
SELECT name,COUNT(*) as count FROM tablename GROUP BY name ORDER BY count DESC;
  • 1
    Что именно группа делает здесь? Непонятно, какова цель? Кажется, это должно работать без него, если вы просто читаете это прямо.
  • 17
    В то время как запрос Амбер является правильным ответом на этот вопрос, я хотел бы внести поправку в ее комментарий, чтобы не вводить новых людей в заблуждение. Если вы опустите «group by» в запросе MySQL, вы не получите [Mike, 1], [Mike, 1], вы получите один результат, который будет именем возвращенной строки FIRST и счетчиком количество строк в таблице, так что в этом случае [Марк, 7]. count (), поскольку агрегатная функция работает со всем набором данных, суммируя, считая или объединяя указанное поле до одной строки. Группировать по подразделам набора данных на куски на основе уникальных комбинаций указанных полей
Показать ещё 6 комментариев
11

как насчет этого:

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

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

Затем вы заказываете по количеству раз, desc; чтобы наиболее часто появляющиеся пользователи приходили первыми.

  • 0
    Ваш запрос помог мне. В результате он возвращает несколько строк. Я также хотел знать, как найти счет этого результата. Пробовал несколько запросов, но он не может рассчитывать на совокупность. Не могли бы вы помочь с этим?
  • 0
    @Nav - счет чего? Количество строк возвращается? Это SELECT COUNT(DISTINCT name) as count FROM your_table Для подсчета общего количества строк в таблице выполните запрос Pascal без оператора group by .
Показать ещё 1 комментарий
4

Просто измените Amber COUNT (*) на COUNT (1) для лучшей производительности.

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню