Какая-либо причина пункта GROUP BY без функции агрегирования?

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

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

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

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

22
задан amesh 19 October 2012 в 10:09
поделиться

5 ответов

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

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

Если вам нужно определить предложение HAVING , у вас есть для определения GROUP BY - вы не можете сделать это вместе с ОТЛИЧИТЕЛЬНЫЙ .

13
ответ дан 29 November 2019 в 05:33
поделиться

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

Итак, ответ на ваш вопрос заключается во второй части описанных выше USE.

6
ответ дан 29 November 2019 в 05:33
поделиться

Выбор DISTINCT можно выполнить с помощью GROUP BY без AGGREGATES .

-121--1625677-

Сослагательный падеж в английском языке.

Подождите, вы имели в виду языки программирования? Затем с помощью (macro) в C для обхода препроцессора # определите из macro () . Например, если кто-то имеет # define free (...) , (free) (...) не будет таким же, как free (...) .

-121--1760318-

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

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

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

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

-2
ответ дан 29 November 2019 в 05:33
поделиться

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

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

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

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

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

1
ответ дан 29 November 2019 в 05:33
поделиться

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

6
ответ дан 29 November 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: