Что такое join-ы, мы уже знаем. Но просто соединить два множества бывает мало. И нам хочется их сгруппировать, например, для отчета.
Как выполняется группировка? С помощью следующих команд:
group by (измерение 1, измерение 2) - по перечисленным измерениям
Еще особенность записи операторов:
Как выполняется группировка? С помощью следующих команд:
group by (измерение 1, измерение 2) - по перечисленным измерениям
group by rollup (измерение 1, измерение 2) - по перечисленным измерениям с итоговыми строками
group by cube (измерение 1, измерение 2) - по всем комбинациям перечисленных измерений с итогами
Непонятно? Давайте на примере.
Связываем наши книги с еще одной таблицей - Publisher, издательство
Делаем запрос по всем комбинациям жанров, связанных с каждым издательством.
Получили выборку значений. Группировка идет по указанным измерениям, справа налево.
То есть вначале для одного издательства (p.name) мы получили список всех жанров (g.name), потом для второго и тд.
NULL - это строка "Всего". Соответственно, по издательству "Wrox" у нас есть книги с жанром "Стихи" и "Фантастика", и строка - "Всего".
Теперь сравним с выборкой вида cube
Теперь мы получили комбинации со строками "Всего" не только по сворачиваемому измерению, а вообще по всем - по каждому жанру и по каждому издательству, а также "Всего - Всего"
Все равно непонятно, зачем нам эти строки - NULL. Чтобы это понять, рассмотрим группировочные функции:
MIN
MAX
AVG (среднее)
COUNT
SUM
и тд
Выведем сумму по всем жанрам всех издательств
Предварительно, конечно, заполнив цену для каждой книги. Аналогично с остальными функциями.
Если же мы хотим наложить ограничение на уже сгруппированные данные, то пишем функции не после оператора select, а после group by с помощью оператора having
Еще особенность записи операторов:
- COUNT (ba.bookId) – ненулевые записи
- COUNT (*) – все записи
Итого:
Последовательность операторов для запросов к БД (используются по мере необходимости):
select - что выбираем
from - откуда
where - условие выборки
group by - группируем результат
having - сортируем сгруппированный результат
order by - сортируем в алфавитном порядке или наоборот
Отличная статья. Побольше бы таких :)
ОтветитьУдалитьСпасибо :)
ОтветитьУдалитьНадеюсь, поможет осознать новичкам, что База Данных - это не так уж и страшно :)
Создание новой таблицы начинаем с диаграммы и связываем ее с таблицей книг? Или просто создаем новую таблицу
ОтветитьУдалитьСоздаем одну таблицу, другую, связываем их)
УдалитьТо есть в диаграмме я создаю таблицу и с помощью отношений связываю ее с таблицей книг? Как мы изначально делали с жанрами.
УдалитьТаблицы связываются через ключи, об этом было в статье http://okiseleva.blogspot.com/2012/01/blog-post_13.html
УдалитьКак правильно написать запросы для таких операций с базой данных?
ОтветитьУдалить1) Найдите тарифный план, скорость передачи данных и размер ежемесячного лимита из всех тарифов Vodafone стоимостью более 100 грн;
2) Найдите модели «model», экран «display» и размер памяти «RAM» из таблицы “Phones”, имеющих 865 или 888 процессоры и цену более 20 тыс. грн;
Я не буду делать за вас тестовое задание)
Удалить