Sql Scholl
Распечатать страницу
Перейти на главную Карта сайта Отправить сообщение

Итоговые данные

Группирование и сортировка

      Важно понимать, что предложения GROUP BY и ORDER BY весьма различны, хотя с их помощью иногда можно добиться одинаковых результатов. Разобраться в этом вам поможет таблица:

ORDER BY GROUP BY
Сортирует полученные результаты Групирует строки. Однако отображаемый результат может не соответствовать порядку группирования.
Могут быть использованы любые столбцы (даже не выбранные в предложении SELECT) Могут быть использованы только выбранные столбцы или выражения; должно быть использовано выражение для каждого выбранного столбца.
Не является необходимым
Требуется, если используются столбцы (или выражения) со статистическими функциями

      Первое из отличий, перечисленных в таблице, является очень важным. Чаще всего вы обнаружите, что данные, сгруппированные с помощью предложения GROUP BY, будут отображаться в порядке группирования. Но так будет не всегда, и в действительности это не требуется в спецификациях SQL. Более того, даже если ваша СУБД сортирует данные так, как указано в предложении GROUP BY, вам вдруг может понадобиться отсортировать их по-другому. То, что вы группируете данные одним способом (чтобы получить для группы указанные итоговые значения), не означает, что желанный для вас результат должен быть отсортирован именно так. Следует использовать явным образом предложение ORDER BY, даже если результат его применения будет совпадать с результатом использования предложения GROUP BY.

Не забывайте использовать предложение ORDER BY

Как правило, каждый раз, когда вы используете предложение GROUP BY, приходится указывать и предложение order by. Это — единственный способ, гарантирующий, что данные будут отсортированы правильно. Не следует надеяться на то, что ваши данные отсортирует предложение group by.

     Чтобы вы могли понять, как следует использовать совместно предложения GROUP BY и ORDER BY, рассмотрим пример. Следующий оператор SELECT аналогичен тем, которые использовались ранее: он выводит номер заказа и количество предметов, упорядоченных по всем заказам, которые содержат три или больше предметов.

SELECT order_num, COUNT(*) AS items FROM Orderltems GROUP BY order_num HAVING COUNT(*) >= 3;



order_num         items 
--------------    -------------
20006             3
20007             5
20008             5
20009             3

     Чтобы отсортировать результат по количеству заказанных предметов, все, что вам необходимо сделать, — это добавить предложение ORDER BY, как показано ниже:

SELECT order_num, COUNT(*) AS items FROM Orderltems GROUP BY order_num HAVING COUNT(*) >= 3; ORDER BY items, order_num;

 

Несовместимость с Access

СУБД Microsoft Access не позволяет осуществлять сортировку по псевдонимам, и для нее этот пример неприменим. Выход состоит в замене столбца items (в предложении order by) вычисляемым выражением или номером поля. По существу, будут работать оба предложения, ORDER BY COUNT(*), order_num и ORDER BY 1, order num.

 

order_num         items 
---------------   -----------------
20006             3
20009             3  
20007             5
20008             5

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