Базы данных
и язык SQL

Страница 7. Группровка вместе с сортировкой в запросе: что ставится раньше - GROUP BY или ORDER BY?

Навигация по уроку Связанные темы
Назад<<<СодержаниеВперёд>>>

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

На сайте есть подробный урок о применении GROUP BY, поэтому останавливаться на всех его свойствах не будем. На этом уроке основное - освоить структуру запросов, в которых одновременно применяются GROUP BY и ORDER BY.

Работаем с базой данных Mediastar, схема и содержание которой даны здесь.

Скачать архив со скриптом на SQL для установки этой базы со всеми данными можно по этой ссылке.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Пример 1. Вывести темы медиа и соответствующие им названия медиа (сайтов). Сгруппировать по теме

Задействованы две таблицы - Mediatheme и Media. Соединение происходит по общему ключу - Mtheme_ID, который для таблицы Mediatheme является первичным ключом, а для таблицы Media - внешним.

Поскольку столбцы, значения которых требуется выводить в этом задании, берутся из разных таблиц, но не являются ни для одной из них первичным либо внешним ключами, в T-SQL, используемом в MS SQL Server, требуется выполнить группировку по этим столбцам. Группировка с применением оператора GROUP BY указывается в самом конце запроса. Группировка требуется, чтобы в результирующей таблице каждому значению темы медиа из одной таблицы были поставлены в соответствие названия медиа из другой таблицы, совпадающие по значению ключа.

Запрос для выполнения этого задания должен быть таким:

USE mediastar; SELECT t.Name, m.Name FROM Mediatheme t JOIN Media m ON m.Mtheme_ID=t.Mtheme_ID GROUP BY t.Name, m.Name

В результате выполнения этого запроса будет выведена следующая таблица:

Переходим к закреплению навыков группировки в запросах с использованием оператора GROUP BY и окончательному выяснению вопроса о том, какой из операторов - GROUP BY и ORDER BY - должен предшествовать в запросе.

Пример 2. Вывести типы контента медиа (сайтов) и соответствующую каждому из них среднюю длительность посещения. Отсортировать по длительности.

Соединяем оператором JOIN три таблицы - Mconttype, Media и Visit. Группировку с помощью оператора GROUP BY применяем к столбцу Ctype, так как он не является ни одним из ключей, ни аргументом агрегатной функции. И в завершении для упорядочения применяем оператор ORDER BY к столбцу результирующей таблицы со средней длительностью визита. Надолго запоминаем: оператор GROUP BY применяется в запросах предпоследним, а оператор ORDER BY - последним.

Запрос для выполнения этого задания должен быть таким:

USE mediastar; SELECT c.Ctype, AVG(v.Duration) AS AvgDur FROM Mconttype c JOIN Media m ON m.Mcont_ID=c.Mcont_ID JOIN Visit v ON v.Media_ID=m.Media_ID GROUP BY c.Ctype ORDER BY AvgDur

В результате выполнения этого запроса будет выведена следующая таблица:

Назад<<<ЛистатьВперёд>>>

Поделиться с друзьями

Назад<<<СодержаниеВперёд>>>