Итоговые данные
Группирование и сортировка
Важно понимать, что предложения GROUP BY и ORDER BY весьма различны, хотя с их помощью иногда можно добиться одинаковых результатов. Разобраться в этом вам поможет таблица:
| ORDER BY | GROUP BY |
| Сортирует полученные результаты | Групирует строки. Однако отображаемый результат может не соответствовать порядку группирования. |
| Могут быть использованы любые столбцы (даже не выбранные в предложении SELECT) | Могут быть использованы только выбранные столбцы или выражения; должно быть использовано выражение для каждого выбранного столбца. |
| Не является необходимым |
Требуется, если используются столбцы (или выражения) со статистическими функциями
|
Первое из отличий, перечисленных в таблице, является очень важным. Чаще всего вы обнаружите, что данные, сгруппированные с помощью предложения GROUP BY, будут отображаться в порядке группирования. Но так будет не всегда, и в действительности это не требуется в спецификациях SQL. Более того, даже если ваша СУБД сортирует данные так, как указано в предложении GROUP BY, вам вдруг может понадобиться отсортировать их по-другому. То, что вы группируете данные одним способом (чтобы получить для группы указанные итоговые значения), не означает, что желанный для вас результат должен быть отсортирован именно так. Следует использовать явным образом предложение ORDER BY, даже если результат его применения будет совпадать с результатом использования предложения GROUP BY.
Не забывайте использовать предложение ORDER BY
Чтобы вы могли понять, как следует использовать совместно предложения GROUP BY и ORDER BY, рассмотрим пример. Следующий оператор SELECT аналогичен тем, которые использовались ранее: он выводит номер заказа и количество предметов, упорядоченных по всем заказам, которые содержат три или больше предметов.
order_num items
-------------- -------------
20006 3
20007 5
20008 5
20009 3
Чтобы отсортировать результат по количеству заказанных предметов, все, что вам необходимо сделать, — это добавить предложение ORDER BY, как показано ниже:
Несовместимость с Access
--------------- -----------------
20006 3
20009 3
20007 5
20008 5
В этом примере предложение GROUP BY используется для группирования данных по номеру заказа (столбец order_num), так что функция COUNT (*) может возвратить количество предметов в каждом заказе. Предложение HAVING фильтрует данные таким образом, что возвращаются только заказы с тремя и более предметами. Наконец, результат сортируется за счет использования предложения ORDER BY.



