Предложение compute использует агрегатные функции (min, max, sum, avg и count) для вычисления итоговых значений, которые появляются как дополнительные строки в результате выполнения запроса. Агрегатные функции, используемые в предложении compute, рассматриваются как строки агрегатных функций.
Агрегатные функции обычно применяются к строкам таблицы для вычисления скалярных величин, которые затем появляются в результате выполнения запроса в виде дополнительной строки (см. пример 6.49). Запрос, использующий такую форму агрегатных функций, возвращает строку в качестве результата.
Предложение compute имеет необязательную опцию by, которая определяет форму группирования результата. Если by опущено, строка агрегатной функции применяется ко всем строкам результата запроса. Опция by имя_столбца указывает, что значения столбца имя_столбца используются для создания группы. Предложение order by требуется, если предложение compute применяется вместе с by.
В примере 6.49 показано использование предложения compute вместе с опцией by.
Предложение compute может иметь множество вариантов использования в операторе select. Пример 6.49 может быть записан с помощью одного оператора select и следующих операторов compute:
compute min (enter_date) by project_no compute min(enter_date)
Существует несколько ограничений относительно предложения compute:
♦ не допускается использование select into (потому что результат предложения compute не является таблицей);
♦ все столбцы в предложении compute должны присутствовать в списке выбора select;
♦ имя каждого столбца в предложении compute by должно появиться в предложении order by;
♦ порядок столбцов в предложениях compute by и order by должен быть одинаковым.