Метод. указания к ЛР № 2
.pdfЛабораторная работа 2
Группировка в запросах
Давайте запросим из таблицы Справочник.Еда следующие реквизиты: Наименование,
Цвет и Калорийность:
ВЫБРАТЬ
Наименование, Цвет, Калорийность
ИЗ
Справочник.Еда
Теперь предположим, что нам необходимо вычислить суммарную калорийность продуктов для каждого цвета.
Алгоритм для жёлтого цвета будет такой:
1.Находим все строчки у которых в поле Цвет стоит Жёлтый.
2.Это будут строчки №1, 6, 8 и 9.
3.Суммируем поле Калорийность для каждой из этих строк: 89 + 31 + 340 + 536
4.Получаем, что для жёлтого цвета суммарная калорийность равна 996.
Итак для каждого цвета.
Описанный выше процесс называется группировкой. Таким образом, группировка - это "схлопывание" (свёртка) строчек таблицы по определенному признаку.
При группировке все поля делятся на две группы:
Группировочные - это как раз те поля, по которым идёт свёртка. В нашем случае таким полем является Цвет.
Группируемые - это те поля, которые сворачиваются (схлопываются, объединяются). В нашем случае таким полем является Калорийность.
Группируемые поля не могут быть сами по себе. К ним обязательно применяется одна из агрегатных функций: СУММА, СРЕДНЕЕ, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫЕ:
Агрегатная функция СУММА
Все строки группируются по группировочным полям (Цвет), а группируемые поля
(Калорийность) суммируются:
ВЫБРАТЬ
Цвет, СУММА(Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Агрегатная функция СРЕДНЕЕ
В этом случае все строки группируются по группировочным полям (Цвет), а среди
группируемых полей (Калорийность) находится среднее значение:
ВЫБРАТЬ
Цвет, СРЕДНЕЕ(Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Агрегатная функция МИНИМУМ
В этом случае все строки группируются по группировочным полям (Цвет), а среди
группируемых полей (Калорийность) находится минимальное значение:
ВЫБРАТЬ
Цвет, МИНИМУМ(Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Агрегатная функция МАКСИМУМ
В этом случае все строки группируются по группировочным полям (Цвет), а среди
группируемых полей (Калорийность) находится максимальное значение:
ВЫБРАТЬ
Цвет, МАКСИМУМ(Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Агрегатная функция КОЛИЧЕСТВО
В этом случае все строки группируются по группировочным полям (Цвет), а среди
группируемых полей (Калорийность) находится их количество:
ВЫБРАТЬ
Цвет, КОЛИЧЕСТВО(Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Агрегатная функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ
В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится количество элементов с различными значениями:
ВЫБРАТЬ
Цвет, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Калорийность)
ИЗ
Справочник.Еда СГРУППИРОВАТЬ ПО
Цвет
Функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ требует пояснения, потому что на выбранном примере её результат совпадает с функцией КОЛИЧЕСТВО. Вот более показательный пример, который всё объясняет:
Группировка без группировочных полей
Соответственно использование группировочных полей также не требуется, если результатом запроса будут только группируемые поля:
К примеру, получим результаты агрегатных функций применительно к полю Калорийность
без группировочных полей (то есть по всей таблице):
ВЫБРАТЬ
СУММА(Калорийность) КАК Сумма, СРЕДНЕЕ(Калорийность) КАК Среднее, МИНИМУМ(Калорийность) КАК Минимум, МАКСИМУМ(Калорийность) КАК Максимум, КОЛИЧЕСТВО(Калорийность) КАК Количество
ИЗ
Справочник.Еда
Группировка по нескольким полям
Группировочных (как впрочем и группируемых) полей может быть сколь угодно много. В запросе они перечисляются через запятую.
Задание
1)Напишите запрос, который находит максимальную калорийность еды для каждого цвета:
2)Напишите запрос, который группирует еду по вкусу и цвету:
3)Напишите запрос, который выведет количество цветов в таблице Справочник.Цвета: