- •Лекция №1 Введение. Основные понятия.
- •Субд ms Access
- •Лекция 2. Системы управления бд
- •1. Файловые системы.
- •2. История развития.
- •3. Функции субд
- •4. Типовая организация современной субд
- •5. Архитектура многопользовательских субд.
- •Лекция №3 Процесс разработки бд.
- •Логическая структура бд преобразуется в физическую с учетом аспектов производительности. Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Пример разработки простой er-модели
- •Концептуальные и физические er-модели
- •Лекция №4 Реляционная модель данных
- •Аномалии отношений
- •Лекция №5 Нормализация отношений
- •4Нф (Четвертая Нормальная Форма)
- •Лекция №6 Реляционная алгебра.
- •Типы данных.
- •Создание таблиц.
- •Команды модификации.
- •Встроенные функции
- •Группировка и агрегаты.
- •Связи между таблицами.
- •Операторы работы с множествами
- •Подзапросы.
- •Условная логика
- •Представления и хранимые процедуры и триггеры.
- •Конструкция while
- •Транзакции и типы хранилищ бд.
- •Тестирование производительность InnoDb и MyIasm
- •Применение
- •Индексы.
- •1. Чтение данных с диска
- •2. Поиск данных в MySql
- •3. Сортировка данных
- •4. Выбор индексов в MySql
- •Уникальные индексы
- •5. Составные индексы
- •Устройство составного индекса
- •Поиск по диапазону
- •Сортировка
- •6. Использование explain для анализа индексов
- •Когда создавать индексы?
- •Администрирование сервера.
- •Разделение прав пользователей;
Группировка и агрегаты.
Агрегатные функции:
Max() Возвращает максимальное значение из набора.
Min() Возвращает минимальное значение из набора.
Avg() Возвращает среднее значение набора.
Sum() Возвращает сумму значений из набора.
Count() Возвращает количество значений в наборе.
SELECT MAX(price),
MIN(price),
AVG(price),
SUM(price),
COUNT(*)
FROM realization;
Мало кого заинтересуют необработанные данные; тем, кто занимается анализом, потребуются обработанные данные, приведенные к виду, наиболее соответствующему их нуждам.
Необходимо понять, что такое группировка:
ФИО |
ТОВАР |
КОЛИЧЕСТВО |
ЦЕНА |
Иванов |
принтер |
2 |
2500 |
Петров |
мышь |
1 |
1500 |
Иванов |
принтер |
2 |
2500 |
Иванов |
мышь |
1 |
1500 |
Петров |
принтер |
1 |
2500 |
Петров |
принтер |
1 |
2500 |
Лосев |
Ноутбук |
1 |
40000 |
Лосев |
ноутбук |
2 |
40000 |
Иванов |
мышь |
1 |
1500 |
Группировка может быть по какому-либо столбцу. Например, группировка по ФИО будет выглядеть следующим образом:
ФИО |
ТОВАР |
КОЛИЧЕСТВО |
ЦЕНА |
Иванов |
|
ИТОГ |
|
Иванов |
принтер |
2 |
2500 |
Иванов |
принтер |
2 |
2500 |
Иванов |
мышь |
1 |
1500 |
Иванов |
мышь |
1 |
1500 |
Петров |
|
ИТОГ |
|
Петров |
мышь |
1 |
1500 |
Петров |
принтер |
1 |
2500 |
Петров |
принтер |
1 |
2500 |
Лосев |
|
ИТОГ |
|
Лосев |
Ноутбук |
1 |
40000 |
Лосев |
ноутбук |
2 |
40000 |
1. Это самая простая группировка:
SELECT customer, SUM(count*price)
FROM realization
GROUP BY customer;
Этот запрос выявит все группировки по клиентам и посчитает итог по каждой группировке. В данном случае итог – это сумма вычисляемого столбца count*price.
Здесь добавлен новый блок GROUP BY.
2. В некоторых случаях может понадобиться сформировать группы, охватывающие более одного столбца.
SELECT customer, product, SUM(count*price)
FROM realization
GROUP BY customer, product;
3. Если мы хотим увидеть не только окончательные итоги, но и промежуточные итоги, то необходимо использовать предложение with rollup в блоке group by:
SELECT customer, product, SUM(count*price)
FROM realization
GROUP BY customer, product with rollup;
4. При группировке данных тоже можно применять условия фильтрации к данным после
формирования групп. Этот тип условий фильтрации должен располагаться в блоке having.
SELECT customer, SUM(count*price)
FROM realization
GROUP BY customer
HAVING SUM(count*price)>5000;
Фильтр WHERE воздействует на данные до группировки, а HAVING– после создания групп. В блок having можно включить агрегатные функции, не перечисленные в блоке select, в блок WHERE нельзя включать агрегатные функции.
