Вам не нужно присоединяться здесь вообще. Предполагая, что number
является столбцом, который вы перечислили:
SELECT number, COUNT(number)
FROM in_clicks
GROUP BY number
ORDER BY COUNT(number) DESC
Агрегатная функция COUNT()
в основном подсчитывает количество строк. (COUNT(*)
работал бы так же хорошо.) Магия здесь GROUP BY number
, которая инструктирует базу данных группировать результаты по различным значениям number
; агрегатные функции будут оценивать каждую группу отдельно. Поскольку в группе «четыре» пять строк, то COUNT()
над этой группой даст 5.
Выбор столбца number
возможен, поскольку мы сгруппированы по нему; без GROUP BY number
мы не смогли бы * выбрать number
вместе с совокупностью, поскольку это не имело бы смысла. Выбор этого столбца позволяет увидеть, к какой группе относится соответствующий совокупный результат.
И предложение ORDER BY
должно быть самоочевидным ... сортировать результаты по убыванию количества строк в этой группе. Обратите внимание, что порядок строк, количество которых одинаково, не определен; Вы можете сделать ORDER BY COUNT(number) DESC, number ASC
, если вы хотите упорядочить сначала по убыванию количества, затем по столбцу number
по возрастанию ... но обратите внимание, что это будет сравнение текста, поэтому порядок будет четыре, один, семь, пять, восемь, шесть, три, два. Если вы заказываете только по количеству, то относительный порядок в одной / семи и двух / трех / шести / восьми строках будет ненадежным, поскольку они имеют равные значения.
* На самом деле это возможно в MySQL для выбора неагрегированных столбцов, которые не включены в GROUP BY, но это нестандартно и должно использовать с предельной осторожностью. Подробнее об этом здесь .