Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05 приложение - SQL Plus - win.doc
Скачиваний:
11
Добавлен:
17.08.2019
Размер:
762.88 Кб
Скачать

Команда 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 строк выбрано.