Использование функции JOIN - PullRequest
2 голосов
/ 18 августа 2011

Я новичок в MySQL и пытаюсь узнать больше о функции JOIN.

Допустим, у меня есть следующий код, и я хочу найти количество для каждого уровня переменная, а затем соединить два столбца. Итак, данные выглядят так:

in_clicks:
one
one
one
two 
three
four
four 
four 
four
four
five 
five
six
seven
seven
seven
eight

и я пытаюсь сгенерировать следующий вывод:

four    5
one     3
seven   3
five    2
two     1
three   1
six     1
eight   1

Не зная ничего о функции JOIN, я могу использовать нечто похожее на следующий код, чтобы получить желаемый результат. (это не работает)

SELECT(SELECT * FROM in_clicks) AS keys,
     (SELECT COUNT(*) FROM in_clicks) AS KeysNum;

Однако, как я могу использовать функцию JOIN для оптимизации моего sql-кода?

1 Ответ

7 голосов
/ 18 августа 2011

Вам не нужно присоединяться здесь вообще. Предполагая, что 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, но это нестандартно и должно использовать с предельной осторожностью. Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...