Агрегирующие функции позволяют получать из таблицы сводную информацию, выполняя операции над группой строк таблицы. Для задания
select-запроса агрегирующих операций исп. следующие ключевые слова:
count определяет количество строк или значений поля, выбранных посредством запроса и не являющихся их значениями.
avg вычисляет среднее значение для всех выбранных значений данного поля.
sum вычисляет арифметическую сумму всех выбранных значений поля.
max вычисляет наибольшее из всех выбранных значений поле
min - соотв., наименьшее
В select-запросе агрегирующие функции используются аналогично именам полей, при этом имена полей используются в качестве аргументов этих функций.
Пример: среднее значение поля mark по всем записям таблицы exam_mark
select avg(mark)
From exam_mark;
Постчитать кол-во строк в exam_mark:
Select count(*)
From exam_mark;
Аргументы distint и all позволяют соотв. исключать и включать дубликаты обрабатываемых функцией count значений.
Предложение group by позволяет группировать записи в подмножества, определяемые значениями какого-либо поля и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно каждой сформированной группе.
Пример: найти максимальное значение оценки, полученной в результате экзаменов каждым студентом
Select student_id, max(mark)
From exam_mark
Group by student_id;
Select student_id, subj_id, max(mark)
From exam_mark
Group by student_id, subj_id;
Предложение Group by не только устанавливает столбцы, по которым осуществляется группирование, но и указывает порядок разбиения столбцов на группы.
Замечание: в предложении group by должны быть указаны все выбираемые столбцы, приведенные после ключевого слова select, кроме столбцов, указанных в качестве аргумента агрегирующей функции. При необходимости часть сформированных групп может быть исключена с помощью предложения having. Предложение having определяет критерий, по которому группы следует включать в выходные данные.
Пример:
select subj_name, max(hour)
From subject
Group by subj_name
Having max(hour)>=72;
Замечание: в условии, задаваемом предложением having, указываются только поля или выражения, которые на выходе имеют единственное значение для каждой выводимой группы.
Записи в реляционной БД неупорядоченные, однако, это можно сделать в результате выполнения запроса. Для этого используется оператор order by, который позволяет упорядочивать выводимые записи в соответствии со значении одного или нескольких выбранных столбцов.
При этом можно задать возрастающую asc или убывающую desc последовательность сортировки.
Пример: выбрать все данные из таблицы, упорядочив их по названию предмета
Select *
From subject
Order by subj_name;
Упорядочить выводимый список предметов обучения по значениям семестра, а внутри семестра - по наименованию предмета.
Select *
From subject
Order by semester, subj_name;
Предложение order by может быть использовано для упорядочивания групп записи. При этом оператор order by в запросе всегда должен быть последним.
Select semester, subj_name, max(hour)
From subject
Group by semester, subj_name
Order by semester;
В данном случае считываются номера столбцов, указанные при определении выходных данных в запросе, а не номера столбцов в таблице.
Пример: упорядочить данные по полю semester
Select semester, subj_id
From subject
Order by 1 desc;
Если в поле, которое использ. для упорядочивания, есть null, то все они размещ. в конце или в начале.