SQL Plus: Создание и выполнение сценариев - Команда COMPUTE
ОГЛАВЛЕНИЕ
Команда COMPUTE
Команда COMPUTE позволяет вычислять и выдавать итоговые значения. При вызове без параметров выдает все заданные вычисления. Команда COMPUTE имеет следующий синтаксис:
- <команда COMPUTE> ::=
- COMP[UTE]{ <функция> [LAB[EL] <текст>]}
OF <ссылка на столбец>{ <ссылка на столбец>}
ON <ссылка на место>{ <ссылка на место>} - <ссылка на место> ::=
- <ссылка на столбец> / REPORT / ROW
Функции, которые можно использовать при вычислении в команде COMPUTE, представлены в табл. 8.
Таблица 8. Функции в команде COMPUTE.
Функция | Назначение | Допустимые типы данных |
AVG | Среднее среди непустых значений | Числовые |
COU[NT] | Количество непустых значений | Все |
MIN[IMUM] | Минимальное значение | Числовые и строковые |
MAX[IMUM] | Максимальное значение | Числовые и строковые |
NUM[BER] | Количество строк | Все |
SUM | Сумма непустых значений | Числовые |
STD | Среднеквадратичное отклонение непустых значений | Числовые |
VAR[IANCE] | Дисперсия непустых значений | Числовые |
Назначение основных конструкций команды COMPUTE описано в табл. 9.
Таблица 9. Основные конструкции команды COMPUTE.
Конструкция | Описание |
LABEL <текст> | Задает метку вычисляемого значения. Если эта конструкция не указана, выдается полное имя функции (см. табл. 8). Максимальная длина текста - 500 символов. Если текст содержит пробелы и символы пунктуации, его надо брать в одиночные кавычки. Метка выравнивается влево и усекается до меньшего из значений ширины столбца или длины строки. Метка для вычисляемого значения выдается в столбце, по которому выполняется BREAK. Чтобы метка не выдавалась, необходимо задать опцию NOPRINT в команде COLUMN для этого столбца. Если вычисления выполняются по ON ROW или ON REPORT, вычисляемое значение выдается в первом столбце и метка не выдается. Чтобы метка была выдана, включите в список выбора первым фиктивный столбец. |
OF <ссылка на столбец> | Задает столбцы или выражения, функция от которого вычисляется. В конструкции OF можно сослаться на выражение в списке выбора, взяв его в двойные кавычки. Имя или псевдоним столбца в кавычки брать не надо. |
ON <ссылка на место> | Задает событие, которое утилита SQL*Plus будет считать местом для вычисления. При ссылке на столбец его имя нельзя уточнять, - при необходимости надо использовать псевдонимы. При достижении места вычисления (т.е. когда изменяется значение столбца или выражения, извлекается новая строка или достигается конец отчета) команда COMPUTE выдает вычисленное значение и начинает вычисление сначала. Если для одного и того же столбца задано несколько команд COMPUTE, применяется последняя из них. В конструкции ON можно сослаться на выражение в списке выбора, взяв его в двойные кавычки. Имя или псевдоним столбца в кавычки брать не надо. Если в качестве события задано ON ROW или ON REPORT, необходимо, чтобы в последней команде BREAK также использовался критерий разрыва ROW или REPORT. |
Для удаления всех определений COMPUTE используется команда CLEAR COMPUTES.
Рассмотрим простой пример вычисления итоговых значений и редактирования SQL-операторов в SQL*Plus:
SQL> set pagesize 55
SQL> break on deptno skip 1
SQL> compute avg label 'Средняя' of sal on deptno
SQL> select deptno, ename, sal
2 from emp
3 order by deptno;
DEPTNO ENAME SAL
---------- ---------- ----------
10 CLARK 2450
KING 5000
MILLER 1300
********** ----------
Средняя 2916,66667
20 SMITH 800
ADAMS 1100
FORD 3000
SCOTT 3000
JONES 2975
********** ----------
Средняя 2175
30 ALLEN 1600
BLAKE 2850
MARTIN 1250
JAMES 950
TURNER 1500
WARD 1250
********** ----------
Средняя 1566,66667
14 строк выбрано.
SQL> compute sum of sal on report
SQL> /
...
тот же результат, поскольку не изменили условие BREAK
SQL> break on deptno skip 1 on report
SQL> list 2
2* from emp
SQL> list *
2* from emp
SQL> i where deptno in (10, 20)
SQL> /
DEPTNO ENAME SAL
---------- ---------- ----------
10 CLARK 2450
KING 5000
MILLER 1300
********** ----------
Средняя 2916,66667
20 SMITH 800
ADAMS 1100
FORD 3000
SCOTT 3000
JONES 2975
********** ----------
Средняя 2175
----------
sum 19625
8 строк выбрано.