- •2.) Требования, предъявляемые к бд.
- •3.) Модели данных. Инфологическая модель.
- •4.) Иерархическая модель.
- •7.) Реляционная модель. Достоинства и недостатки
- •11. Основы, принципы и аспекты проектирования.
- •12. Проектирование модели бд в терминах «сущность-связь»
- •13. Проектирование модели бд в терминах «сущность-связь»
- •Понятие нормализации данных. Функциональная зависимость
- •Первая, вторая и третья нормальные формы.
- •Нф Бойса-Кодда, четвертая и пятая нормальные формы.
- •Понятие субд. Классификация субд.
- •Типовая организация современной субд.
- •Основные функции субд.
- •Языки запросов, их основные возможности.
- •Основные объекты субд «Oracle».
- •5.3.1. Символьные типы
- •Перечень символьных типов
- •Создание запросов. Основные типы условий поиска.
- •2.4.4.1. Создание запроса на выборку с помощью Мастера
- •27. Агрегирование и группировка данных
- •28.Манипулирование данными отношений
- •Базовые средства манипулирования данными
- •29. Понятие подзапроса.
- •Использование встроенных процедур и функций. Функции работы с символами, строками и датами.
- •Initcap(строка)
- •31. Использование встроенных процедур и функций. Функции работы с числами. Функции преобразования типов данных.
- •32. Создание пользовательских процедур.
- •33. Создание пользовательских функций.
- •35. Работа с курсорами
- •36. Соединение таблиц и запросов при организации запросов
- •37. Целостность баз данных.
- •38. Работа с триггерами.
- •39. Понятие транзакции. Свойства транзакций.
- •40. Взаимовлияние транзакций
- •41. Блокировки и тупиковые ситуации
- •42. Индексирование. Виды индексов
- •43. Работа с индексами
- •44. Оптимизация запросов в реляционных субд
- •45. Методы оптимизации запросов
- •46. Методы доступа к базе данных. Технологии odbc, bde.
- •47. Методы доступа к базе данных. Технологии ado, ole db
- •48. Модели организации данных.
27. Агрегирование и группировка данных
В данном разделе рассматривается применение в запросе агрегирующих функций - функций вычисляющих результат по набору значений группы, либо всех записей БД. Например, функция sum возвращает сумму значений заданного поля, а функция count - общее число записей.
Агрегирующая функция может применяться ко всем записям БД слоя, к выборке по заданным условиям и, кроме того, возможно группирование записей слоя в несколько групп, и применение агрегирующей функции к каждой группе
Применяемые агрегирующие функции записываются после ключевого слова SELECT. Также допускается использовать агрегирующие функции в составе выражений, включающих функции, арифметические и побитовые операции. В одном запросе может перечисляться несколько выражений с агрегирующими функциями. Не допускается в запросе одновременно с агрегирующими функциями запрашивать значения полей записей БД, либо использовать в аргументах неагрегирующих функций обращения к полям записей БД . Например, запрос вида SELECT SQRT(Area), SUM(Perimeter) FROM Здания не допускается, поскольку аргументом функции SQRT является название поля данных.
Общая запись агрегирующих функций:
<Функция>([DISTINCT]<выражение>)
В качестве аргумента агрегирующей функции обычно используется название поля, над значениями которого проводятся вычисления. Также допускается в качестве аргумента использовать выражения, включающие в себя произвольную комбинацию названий полей, констант, функций и подзапросов, объединенных арифметическими и побитовыми операциями.
Остальная часть запроса задается стандартным образом.
Перед аргументом функции (кроме функций MAX и MIN)может указываться ключевое слово DISTINCT. В этом случае итоговое значение вычисляется только для различающихся значений аргумента. При использовании ключевого слова DISTINCT в качестве аргумента агрегирующей функции нельзя использовать арифметические выражения, - только названия полей.
В языке SQL используются следующие агрегирующие функции:
SUM([DISTINCT] <выражение>)
Выводит в итоговой таблице сумму значений для выражения по полям выборки. Выражение должно возвращать числовое значение.
AVG([DISTINCT] <выражение>)
Среднее значение для выражения. Выражение должно возвращать числовое значение.
COUNT([DISTINCT] <выражение> |*)
Подсчитывает число записей, в который выражение не имеет значение Null (поля имеют значение Null, когда никакое значение для них не задано). Выражение может возвращать произвольное значение.
При Возвращает максимальное значение выражения для выборки.
MIN(<выражение>)
Возвращает минимальное значение выражения из выборки.
Применение агрегирующих функций
Простой пример
SELECT SUM(Perimeter) FROM Здания
Выводит сумму периметров зданий.
Одновременное применение нескольких функций
SELECT AVG(Area), Count(*) FROM Здания
Выводит среднюю площадь здания и общее количество зданий.
Применение функций совместно с условиями отбора
SELECT SUM(Area) FROM Здания WHERE Улица='Нахимова'
Возвращает сумму площадей зданий расположенных на улице Нахимова.
Применение выражений в качестве аргументов агрегирующих функций
SELECT SUM(Area/Perimeter*2) FROM Здания
Для каждого здания рассчитывается величина равная Площадь/Периметр*2 и суммируется.
Применение агрегирующих функций в составе выражений
SELECT SQRT(SUM(Area)), "Общий периметр" + SUM(Perimeter) FROM Здания
Возвращает квадратный корень от суммарной площади всех зданий и фразу вида «Общий периметр XXX», где XXX - суммарный периметр всех зданий.
Использование ключевого слова DISTINCT
SELECT COUNT(DISTINCT Улица) FROM Здания
Возвращает количество разных названий улиц в БД слоя.
Группировка записей
Конструкция GROUP BY в команде выборки позволяет разделить записи БД слоя на группы. Группировка записей может выполняться по значениям одного или нескольких полей записей, либо на основании значений столбцов таблицы результатов выборки.Формат конструкции: GROUP BY <поля данных>|<номера столбцов>. При задании названии полей данных группировка выполняется по полям данных таблицы, если же номера столбцов - то по номерам столбцов выводимой таблицы (нумерация столбцов начинается с 1).В команде выборки конструкция GROUP BY размещается непосредственно после конструкции WHERE, перед HAVING и ORDER.Группировка записей всегда используется совместно с агрегирующими функциями. В таком случае агрегирующие функции применяются отдельно к каждой группе записей. Например, при группировке записей слоя Здания по полю Улица, все записи БД слоя будут разбиты на несколько групп, в каждой группе записи с одинаковой улицей. И, при применении функции COUNT в таком запросе, будет выведено количество записей в каждой группе.
Группировка одновременно может выполняться по нескольким полям (столбцам). Поля (столбцы) группировки перечисляются через запятую, после слов GROUP BY. Группировка сначала выполняется по первому полю, затем, уже сгруппированные записи разбиваются на подгруппы по второму полю и т.д.
При использовании в запросе группировки, среди выводимых столбцов выборки могут задаваться агрегирующие функции, и поля записей по которым выполняется группировка, либо выражения включающие эти поля.
используемом формате функции COUNT(*) возвращает общее количество записей в БД слоя.
MAX( <выражение>)
