Я пытаюсь найти запрос 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
count(*) > 1
вwhere
предложение, потому что это агрегатные функции. Вы также получаете очень бесполезное сообщение: «Неправильное использование групповой функции». Правильный путь к псевдониму счетчикname,COUNT(*) as cnt
и добавить имеющий пункт следующим образом:HAVING count > 1
.HAVING
для условий, которые должны применяться после агрегирования, тогдаWHERE
как для условий, которые должны применяться до него. (Еще один способ думать об этом -WHERE
применить к исходным данным строки;HAVING
применить к выходным данным строки.)Как насчет чего-то вроде этого:
Вы выбираете имя и количество раз, которое оно появляется, но группируете по имени, поэтому каждое имя выбирается только один раз.
Наконец, вы заказываете количество раз в порядке DESCending, чтобы на первом месте были наиболее часто появляющиеся пользователи.
источник
SELECT COUNT(DISTINCT name) as count FROM your_table
для подсчета общего количества строк в таблице, сделайте запрос Паскаля безgroup by
оператора.Просто изменил COUNT (*) Амбер на COUNT (1) для лучшей производительности.
источник