Есть ли причина для предложения GROUP BY без функции агрегирования? - PullRequest
22 голосов
/ 04 февраля 2010

В данный момент я (полностью) изучаю SQL и натолкнулся на предложение GROUP BY.

GROUP BY агрегирует или группирует набор результатов в соответствии с аргументами, которые вы ему даете. Если вы используете это предложение в запросе, вы можете затем выполнить агрегатные функции для набора результатов, чтобы найти статистическую информацию о наборе результатов, например, найти средние значения (AVG()) или частоту (COUNT()).

Мой вопрос: полезен ли оператор GROUP BY без сопутствующей агрегатной функции?

Обновление Использование GROUP BY в качестве синонима для DISTINCT является (вероятно) плохой идеей, потому что я подозреваю, что это медленнее.

Ответы [ 5 ]

13 голосов
/ 04 февраля 2010

полезна ли инструкция GROUP BY без сопутствующей агрегатной функции?

Использование DISTINCT было бы синонимом в такой ситуации, но причина, по которой вы хотите / должны определить предложение GROUP BY, заключается в возможности определения HAVING подробностей предложения.

Если вам нужно определить предложение HAVING, у вас есть для определения GROUP BY - вы не можете сделать это в сочетании с DISTINCT.

6 голосов
/ 04 февраля 2010

Группировка по может использоваться в Двухстороннем В основном
1) в соединении с функциями агрегирования SQL
2) до исключении повторяющихся строк изнабор результатов

ТАК ответ на ваш вопрос находится во второй части описанных выше ИСПОЛЬЗОВАНИЙ.

6 голосов
/ 04 февраля 2010

Вы можете выбрать DISTINCT , используя GROUP BY без каких-либо AGGREGATES .

1 голос
/ 04 февраля 2010

Примечание: все нижеприведенное относится только к MySQL

GROUP BY - это гарантировано для возврата результатов в порядке, DISTINCT - нет.

GROUP BY вместе с ORDER BY NULL имеет ту же эффективность, что и DISTINCT (и реализована, скажем, способом).Если в агрегируемом (или дифференцированном) поле имеется индекс, в обоих пунктах используется свободное сканирование индекса по этому полю.

В GROUP BY можно возвращать не сгруппированные и не агрегированные выражения.MySQL выберет любые случайные значения из соответствующей группы для вычисления выражения.

С помощью GROUP BY вы можете опустить выражения GROUP BY в предложении SELECTDISTINCT вы не можете.Каждая строка, возвращаемая DISTINCT, гарантированно будет уникальной.

0 голосов
/ 04 февраля 2010

Используется не только для агрегирования функций.

Например, рассмотрим следующий код:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name

Это вернет только 1 результат на продукт, но с последним обновленным значением этих записей.

...