Использование баз данных на практике ориентировано, прежде всего, на получение итоговых аналитических и справочных отчетов, которые получаются в результате выполнения специальных SQL-запросов. В языке SQL для получения итоговых значений по столбцам (агрегирование данных по столбцам) применяются специальные функции агрегирования:
Таблица 2.
Функции агрегирования, применяемые в SQL-запросах
Название функции
Описание функции агрегирования
COUN
Подсчитывает количество строк
SUM
Суммирует значение по столбцу
AVG
Рассчитывает среднее значение по столбцу
MAX
Определяет максимальное значение по столбцу
MIN
Определяет минимальное значение по столбцу
Рассмотрим примеры запросов, использующих функции агрегирования. Например, надо подсчитать количество зарегистрированных заказов в журнале Orders:
SELECT COUNT(*) FROM orders;
Результат по запросу, содержащий функцию COUNT() показан на рис. 24 ниже
Рис. 24. Результат запроса с функцией агрегирования COUNT().
Запрос найти сумму всех выполненных заказов:
SELECT SUM(amount) AS Сумма FROM Orders;
Рис. 2.6. Результат запроса с функцией агрегирования SUM().
Аналогично можно построить запросы и с другими функциями агрегирования MIN(), MAX и т.д. Например:
SELECT MAX(amount) AS Сумма FROM Orders;
Замечание: Столбец по которому идет группировка, должен обязательно присутствовать в списке столбцов оператора SELECT.
Функции агрегирования можно использовать в запросах совместно с ключевым словом GROUP BY, что позволяет проводить агрегирования по сгруппированным строкам.
Например, надо найти сумму всех заказов на каждый день (т.е. сгруппировать заказы по датам и просуммировать данные по каждому дню):
SELECT SUM(amount) AS Сумма, odate AS Дата
FROM Orders GROUP BY odate;
Результат запроса показан на рис.25 ниже.
Рис. 25. Результат запроса с функцией агрегирования SUM() и ключевым словом GROUP BY .
Для формирования условий над столбцами, которые используются в функции агрегирования, нельзя использовать ключевое слово WHERE, для этого в языке SQL применяется специальный оператор HAVING. Например, надо найти сумму покупок на каждый день, причем интересны только те дни, в которых сумма превышает 10000:
SELECT SUM(amount) AS Сумма, odate AS Дата FROM Orders
GROUP BY odate
HAVING SUM(amount) >10000;
В этом запросе столбец amount используется в функции агрегирования SUM(amount), поэтому для формирования условия отбора строк надо применить ключевое слово HAVING. Результат запроса показан на рис.26 ниже. Отобраны только две строки.
Рис. 26. Результат запроса с функцией агрегирования SUM() и ключевыми словами GROUP BY и HAVING .
Условия над столбцами, которые не входят в группировку формируются с ключевым словом WHERE. Например, если надо найти минимальный заказ на конкретный день, то запрос на SQL запишется так:
SELECT snum, MIN(amount) FROM Orders
WHERE odate= #01/03/2006# GROUP BY snum;
Здесь столбец odate не охвачен функцией агрегирования. Поэтому к нему можно применить ключевое слово WHERE.