2012-04-17 2 views
1

Я надеюсь получить некоторое объяснение по ранжировочному запросу, с которым я столкнулся. У меня есть аналогичная установка, где у меня есть поле точек, которое я хочу заказать, но не могу на всю жизнь понять этот вопрос: http://www.artfulsoftware.com/infotree/queries.php#460Нужно некоторое объяснение запроса на ранжирование MySQL

Я не понимаю, что такое соединение, и почему, если я не включаю группу по заявлениям, я просто получаю одну запись, которая полностью беспорядочна и неверна. Я всегда вижу выражение Group By как ограничение количества результатов, но этот запрос, кажется, добавляет их к окончательному набору результатов (так же, как и без группы, вы получаете одну строку)

ответ

1

Запрос по существу делает следующее:

Для каждой строки в таблице исходных голосов подсчитывайте, сколько строк (в одной таблице) имеет < = этой строке. Счет совпадает с рангом.

JOIN необходимо связать таблицу голосов с каждой отдельной строкой в ​​таблице голосов.

GROUP BY необходимо, если у вас есть COUNT() в выбранном списке. Для каждого человека запрос подсчитывает, сколько строк он найдет, которые имеют голоса < = для каждого человека. GROUP BY с COUNT ограничивает количество результатов результатов JOIN, которые являются умножением исходной таблицы голосов.

+0

Спасибо за ваш ответ! У меня возникли проблемы с тем, как JOIN играет в это. Утверждение JOIN ON выглядит так, как будто это должно быть условие WHERE. Подходит ли JOIN каждая строка в таблице, соответствующая этим условиям, для каждой записи в исходной таблице, которую COUNT подсчитывает, сколько фактически вернулось? Если все это правильно, GROUP BY - это то место, где я теряюсь. Это GROUPING таблица соединений? –

+1

Да, соединение возвращает каждую строку в таблице, удовлетворяющей этим условиям. Если вы должны были заменить COUNT на v2.names и удалить GROUP BY, набор результатов будет умножен, чтобы проиллюстрировать это. –

Смежные вопросы