Добавил:
sora.alai.102@gmail.com Делаю работы на заказ. Какие именно? Пишите. Или регайтесь на бирже, где я работаю: https://vsesdal.com/promo?ref=748568 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Метод. указания к ЛР № 2

.pdf
Скачиваний:
27
Добавлен:
25.11.2018
Размер:
363.19 Кб
Скачать

Лабораторная работа 2

Группировка в запросах

Давайте запросим из таблицы Справочник.Еда следующие реквизиты: Наименование,

Цвет и Калорийность:

ВЫБРАТЬ

Наименование, Цвет, Калорийность

ИЗ

Справочник.Еда

Теперь предположим, что нам необходимо вычислить суммарную калорийность продуктов для каждого цвета.

Алгоритм для жёлтого цвета будет такой:

1.Находим все строчки у которых в поле Цвет стоит Жёлтый.

2.Это будут строчки №1, 6, 8 и 9.

3.Суммируем поле Калорийность для каждой из этих строк: 89 + 31 + 340 + 536

4.Получаем, что для жёлтого цвета суммарная калорийность равна 996.

Итак для каждого цвета.

Описанный выше процесс называется группировкой. Таким образом, группировка - это "схлопывание" (свёртка) строчек таблицы по определенному признаку.

При группировке все поля делятся на две группы:

Группировочные - это как раз те поля, по которым идёт свёртка. В нашем случае таким полем является Цвет.

Группируемые - это те поля, которые сворачиваются (схлопываются, объединяются). В нашем случае таким полем является Калорийность.

Группируемые поля не могут быть сами по себе. К ним обязательно применяется одна из агрегатных функций: СУММА, СРЕДНЕЕ, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫЕ:

Агрегатная функция СУММА

Все строки группируются по группировочным полям (Цвет), а группируемые поля

(Калорийность) суммируются:

ВЫБРАТЬ

Цвет, СУММА(Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Агрегатная функция СРЕДНЕЕ

В этом случае все строки группируются по группировочным полям (Цвет), а среди

группируемых полей (Калорийность) находится среднее значение:

ВЫБРАТЬ

Цвет, СРЕДНЕЕ(Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Агрегатная функция МИНИМУМ

В этом случае все строки группируются по группировочным полям (Цвет), а среди

группируемых полей (Калорийность) находится минимальное значение:

ВЫБРАТЬ

Цвет, МИНИМУМ(Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Агрегатная функция МАКСИМУМ

В этом случае все строки группируются по группировочным полям (Цвет), а среди

группируемых полей (Калорийность) находится максимальное значение:

ВЫБРАТЬ

Цвет, МАКСИМУМ(Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Агрегатная функция КОЛИЧЕСТВО

В этом случае все строки группируются по группировочным полям (Цвет), а среди

группируемых полей (Калорийность) находится их количество:

ВЫБРАТЬ

Цвет, КОЛИЧЕСТВО(Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Агрегатная функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится количество элементов с различными значениями:

ВЫБРАТЬ

Цвет, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Калорийность)

ИЗ

Справочник.Еда СГРУППИРОВАТЬ ПО

Цвет

Функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ требует пояснения, потому что на выбранном примере её результат совпадает с функцией КОЛИЧЕСТВО. Вот более показательный пример, который всё объясняет:

Группировка без группировочных полей

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

К примеру, получим результаты агрегатных функций применительно к полю Калорийность

без группировочных полей (то есть по всей таблице):

ВЫБРАТЬ

СУММА(Калорийность) КАК Сумма, СРЕДНЕЕ(Калорийность) КАК Среднее, МИНИМУМ(Калорийность) КАК Минимум, МАКСИМУМ(Калорийность) КАК Максимум, КОЛИЧЕСТВО(Калорийность) КАК Количество

ИЗ

Справочник.Еда

Группировка по нескольким полям

Группировочных (как впрочем и группируемых) полей может быть сколь угодно много. В запросе они перечисляются через запятую.

Задание

1)Напишите запрос, который находит максимальную калорийность еды для каждого цвета:

2)Напишите запрос, который группирует еду по вкусу и цвету:

3)Напишите запрос, который выведет количество цветов в таблице Справочник.Цвета: