Операция подведения итогов
. Это также унарная операция. Ее синтаксис определим так:
подведение-итогов ::= SUMMARIZE терм BY (список) ADD | |
агрегатное-выражение AS атрибут1; |
Здесь список – список атрибутов, по которым производится группирование;
агрегатное-выражение
– скалярное выражение, возвращающее единственное значение для группы кортежей;
атрибут – атрибут схемы производного отношения, определенный на значениях агрегатного-выражения.
Операция SUMMARIZE значительно сложнее операции EXTEND. Поясним ее действие. Пусть R – отношение со схемой, содержащей атрибуты A1, A2, ..., An, по которым нужно подвести итог. Выражение
SUMMARIZE R BY (A1, A2, ..., An) ADD exp AS Z;
произведет безымянное отношение со схемой {A1, A2, ..., An, Z}. Тело этого отношения будет содержать все кортежи проекции отношения R на атрибуты A1, A2, ..., An, дополненные значениями атрибута Z. Значение атрибута Z в кортеже t производного отношения является значением выражения exp. Оно вычисляется на подмножестве всех таких кортежей отношения R, в которых значения атрибутов A1, A2, ..., An совпадают со значениями соответствующих атрибутов в t. Концептуально эту процедуру можно представить как формирование групп кортежей R с одинаковыми значениями атрибутов A1, A2, ..., An
и вычисление значения exp для каждой группы.
Выражение exp содержит ссылки на агрегатные функции, возвращающие скалярные значения, вычисленные для группы кортежей операнда. Имеет смысл ввести такие агрегатные функции, которые выполняют вычисления, часто встречающиеся при подведении итогов:
COUNT | число значений атрибута; | ||
SUM | сумма значений атрибута; | ||
AVG | среднее арифметическое значений атрибута; | ||
MAX | максимальное значение атрибута; | ||
MIN | минимальное значение атрибута. |
Пример:
SUMMARIZE SPJ BY (S#, P#) SUM(Qt) AS Tot_Qt;
Это выражение производит отношение со схемой {S#, P#, Tot_Qt}. Тело отношения для каждой пары значений {S#, P#}, встретившейся в SPJ хотя бы один раз, будет содержать ровно один кортеж с соответствующими значениями номера поставщика, номера детали и суммарного объема поставок этой детали этим поставщиком независимо от того, для каких изделий и когда он поставлял этот вид детали.