
- •Нормализация. 1нф, 2нф, 3нф.
- •Сравнение технологий bde и ado.
- •Индексирование бд. Правила индексирования.
- •Работа с sql-запросами в ms Access.
- •Использование фразы having. Использование фразы having
- •9. Выборка вычисляемых значений. Исключение дубликатов. Исключение дубликатов
- •10. Запросы с использованием нескольких таблиц.
- •Фраза group by
- •12. Связанные таблицы. Ключи. Виды ключей.
- •13. Типы данных в sql.
- •14. Сетевая модель данных. Файл – сервер и клиент – сервер.
- •15. Обзор визуальных компонентов среды делфи, необходимых для работы с бд.
- •16. Предложение select. Область применения. Формат записи. О предложении select
- •18. Фраза where. Операторы сравнения.
- •19. Агрегатные функции в sql.
- •20. Реляционная модель данных.
- •21. Предложение delete. Удаление единственной записи. Удаление множества записей.
- •23. Предложение insert. Вставка единственной записи. Вставка множества записей.
- •24. Иерархическая модель данных.
- •25. Обзор не визуальных компонентов делфи, необходимых для работы с бд.
- •26. Модель данных.
- •27. Фразы between, in, like. Использование between
- •Использование in
Фраза group by
Выше было показано, как можно вычислить массу определенного продукта, поставляемого поставщиками. Предположим, что теперь требуется вычислить общую массу каждого из продуктов, поставляемых в настоящее время поставщиками.
Это можно легко сделать с помощью предложения:
SELECT ПР, SUM(К_во)
FROM Поставки
GROUP BY ПР;
Результат показан на рис. 2.6,а.
+-------------------------------------------------------+
¦ а) б) в) г) ¦
¦ ПР ПС ПР Цена К_во ПР ПР ¦
¦ -- ---- -- -- ----- ---- -- ---- -- ---- ¦
¦ 9 0 1 9 -0- -0- 1 370 9 0 ¦
¦ 11 150 3 9 -0- -0- 2 0 11 150 ¦
¦ 12 30 5 9 -0- -0- 3 250 12 30 ¦
¦ 15 370 1 11 1.50 50 4 100 15 70 ¦
¦ 1 370 5 11 -0- -0- 5 170 1 370 ¦
¦ 3 250 6 11 -0- -0- 6 220 3 250 ¦
¦ 5 170 8 11 1.00 100 7 200 5 70 ¦
¦ 6 220 1 12 3.00 10 8 150 6 140 ¦
¦ 8 150 3 12 2.50 20 9 0 8 150 ¦
¦ 7 200 6 12 -0- -0- 10 220 7 200 ¦
¦ 2 0 1 15 2.00 170 11 150 2 0 ¦
¦ 4 100 3 15 1.50 200 12 30 4 100 ¦
¦ 13 190 2 1 3.60 300 13 190 13 190 ¦
¦ 14 70 7 1 4.20 70 14 70 14 70 ¦
¦ 16 250 2 3 -0- -0- 15 370 16 250 ¦
¦ 17 50 7 3 4.00 250 16 250 17 50 ¦
¦ 10 220 . . . 17 50 10 220 ¦
+-------------------------------------------------------+
Рис. 2.6. Иллюстрации к фразе GROUP BY
Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY. В рассматриваемом примере строки таблицы Поставки группируются так, что в одной группе содержатся все строки для продукта с ПР=1, в другой - для продукта с ПР=2 и т.д. (см. рис. 2.6,б). Далее к каждой группе применяется фраза SELECT. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением столбца, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из стандартных функций, которая оперирует всеми значениями столбца в группе и сводит эти значения к единственному значению (например, сумме).
Отметим, что фраза GROUP BY не предполагает ORDER BY. Чтобы гарантировать упорядочение по ПР результата рассматриваемого примера (рис. 2.6,в) следует дать запрос
SELECT ПР, SUM(К_во)
FROM Поставки
GROUP BY ПР
ORDER BY ПР;
Наконец, отметим, что строки таблицы можно группировать по любой комбинации ее столбцов. Так, по запросу
SELECT Т, БЛ, COUNT(БЛ)
FROM Заказ
GROUP BY Т, БЛ;
можно узнать коды и количество порций блюд, заказанных отдыхающими пансионата (32 человека) на каждую из трапез следующего дня:
Т БЛ COUNT(БЛ)
- -- ---------
1 3 18
1 6 14
1 19 17
1 21 15
...
Если в запросе используются фразы WHERE и GROUP BY, то строки, не удовлетворяющие фразе WHERE, исключаются до выполнения группирования.
Например, выдать для каждого продукта его код и общий объем возможных поставок, учитывая временную недееспособность поставщика с ПС=2:
SELECT ПР, SUM(К_во)
FROM Поставки
WHERE ПС <> 2
GROUP BY ПР;
Результат, приведенный на рис. 2.6,г, отличается от результата (рис. 2.6,а) аналогичного запроса для всех поставщиков объемом поставок продуктов с кодами 15, 5 и 6.