Использование агрегатных функций
Важной функцией любой информационной системы является автоматическое формирование отчетности на основе данных, хранящихся в БД. Во многих отчетах требуется отображать не сами данные (их слишком много), а результаты их статистической обработки, например, суммарные или средние значения по различным показателям. Выполнять статистическую обработку данных в клиентских приложениях неэффективно, поскольку при этом придется пересылать по сети большое количество необработанной информации с сервера. Более разумным решением является обеспечение возможности выполнять статистическую обработку данных непосредственно на сервере.
С этой целью в команду SELECT введены агрегатные (статистические, итоговые) функции. Основная особенность этих функций состоит в том, что каждая из них вычисляет одно итоговое значение по какому-либо столбцу (это может быть и вычисляемый столбец) для множества строк таблицы.
В стандарте определено 5 агрегатных функций:
sum(имя_столбца) – сумма значений заданного столбца,
avg(имя_столбца) – среднее значение
min(имя_столбца), max(имя_столбца)– минимальное и максимальное значение
count([DISTINCT] * или имя_столбца) – подсчет количества строк.
Первые две функции (сумма и среднее) могут быть вычислены только по числовым столбцам, максимальное и минимальное значения могут быть определены для столбцов всех типов (кроме больших объектов), при этом строки текста сравниваются в лексикографическом, а даты – в хронологическом порядке.
Например:
Подсчитать средний балл по всем студентам и предметам
select avg (mark) avg_mark from marks
Найти минимальную и максимальную даты рождения студентов
select MIN(born) min_date, MAX(born) max_date from students
Функция COUNT, казалось бы, вообще не должна содержать аргументов, поскольку ее назначение – подсчет количества строк, что она и делает, если в качестве аргумента используется символ-заменитель *. Однако, если в качестве аргумента использовать имя столбца, данная функция будет подсчитывать количество непустых значений в данном столбце. Второй вариант аргумента разумно использовать, только если столбец не имеет ограничения NOT NULL. Использование ключевого слова DISTINCT приводит к тому, что подсчитывается количество уникальных значений в заданном столбце.
Например:
Посчитать количество студентов (количество строк в таблице students)
select count (*) count_students from students
Подсчитать количество студентов, для которых известен номер их телефона.
select count (phone) count_phones from students
Подсчитать количество уникальных значений оценок в таблице marks:
select count (DISTINCT mark) count_marks from marks
Отметим, что запросы, вычисляющие агрегатные функции по всей таблице, всегда возвращают одну строку, содержащую итоговые данные. Поэтому в списке выражений, следующим за словом SELECT, могут быть только агрегатные функции(или выражения на основе агрегатных функций).
Дата добавления: 2015-08-26; просмотров: 842;