プライマリ・コンテンツに移動
SQL*Plus®ユーザーズ・ガイドおよびリファレンス
リリース1 (12.1)
B71396-03
目次へ移動
目次
索引へ移動
索引

前
次

COMPUTE

構文

COMP[UTE] [function [LAB[EL] text] ...     OF {expr | column | alias} ...     ON {expr | column | alias | REPORT | ROW} ...]

BREAKコマンドと組み合せて、選択した行のサブセットについて、各種の標準計算方法を使用してサマリー行を計算して出力します すべてのCOMPUTE定義もリスト表示します。サマリーの作成方法の詳細は、間隔の設定およびサマリー行によるレポートの明確化についてを参照してください。

function ...

表12-2に示す関数の1つを指定します。複数の関数を指定する場合は、関数と関数の間を空白で区切ります。

COMPUTEコマンドの関数は、COMPUTEコマンド内の順序にかかわらず、常にAVG、COUNT、MINIMUM、MAXIMUM、NUMBER、SUM、STD、VARIANCEの順序で実行されます。

表12-2 COMPUTE関数

関数 計算 適用できるデータ型
AVG

NULL以外の値の平均

NUMBER

COU[NT]

NULL以外の値の数

すべての型

MIN[IMUM]

最小値

NUMBER、CHAR、NCHAR、VARCHAR2(VARCHAR)、NVARCHAR2(NCHAR VARYING)

MAX[IMUM]

最大値

NUMBER、CHAR、NCHAR、VARCHAR2(VARCHAR)、NVARCHAR2(NCHAR VARYING)

NUM[BER]

行の数

すべての型

SUM

NULL以外の値の合計

NUMBER

STD

NULL以外の値の標準偏差

NUMBER

VAR[IANCE]

NULL以外の値の平方偏差

NUMBER

LAB[EL] text

計算値に対応して出力されるラベルを定義します。LABEL句を使用しない場合のデフォルトのtextは、省略されていないファンクション・キーワードです。空白または句読点を含む場合、textを一重引用符で囲む必要があります。ラベルは左揃えで出力され、列幅または行サイズのいずれか小さい方に合せて切り捨てられます。ラベルの最大長は500文字です。

計算された値のラベルは、指定したブレーク列に表示されます。ラベルを非表示にするには、ブレーク列に対して、COLUMNコマンドのNOPRINTオプションを使用します。

COMPUTEコマンドの中で同じ関数を繰り返し使用すると、SQL*Plusはアラートを発行し、そのうちの最初の関数のみを使用します。

ON REPORTおよびON ROW計算では、SELECT構文のリストに指定された最初の列にラベルが示されます。SELECT文の中で最初にNOPRINT列を使用することによって、ラベルを非表示にできます。SELECT文ON REPORTまたはON ROWの最初の列の関数を計算する場合は、計算済の値が最初の列に表示され、ラベルは表示されません。ラベルを見るには、SELECT構文のリストで最初にダミー列を選択します。

OF {expr | column | alias} ...

OF句では、式または関数の参照を二重引用符で囲むことによって、SELECT文の中の式または関数の参照を指定できます。列の名前および別名に引用符は必要ありません。

ON {expr | column | alias | REPORT | ROW} ...

複数のCOMPUTEコマンドのON句で同じ列が参照されている場合は、最後のCOMPUTEコマンドのみが適用されます。

ON句でSQL SELECT式または関数の参照を指定するには、その式または関数の参照を引用符で囲みます。列の名前および別名に引用符は必要ありません。

すべてのCOMPUTE定義を表示するには、句を指定せずにCOMPUTEを入力します。

使用方法

計算が実行されるためには、次の条件がすべて満たされている必要があります。

  • OF句で参照している1つ以上の式、列または列の別名が、SELECT文の中でも指定されている。

  • ON句で参照している式、列または列の別名が、SELECT文の中および最新のBREAKコマンドの中にも指定されている。

  • ON句でROWまたはREPORTを参照する場合は、最新のBREAKコマンドの中でもROWまたはREPORTを参照する。

すべてのCOMPUTE定義を取り消すには、CLEAR COMPUTESコマンドを使用します。

COMPUTEが実行されている列に対してNOPRINTオプションを使用すると、COMPUTEの実行結果も非表示になります。

AC_MGR(アカウント・マネージャ)およびSA_MAN(セールスマン)の各職種別に給与の小計を計算し、TOTALという計算ラベルを付けるには、次のように入力します。

BREAK ON JOB_ID SKIP 1;
COMPUTE SUM LABEL 'TOTAL' OF SALARY ON JOB_ID;
SELECT JOB_ID, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE JOB_ID IN ('AC_MGR', 'SA_MAN')
ORDER BY JOB_ID, SALARY;
JOB_ID     LAST_NAME                     SALARY
---------- ------------------------- ----------
AC_MGR     Higgins                        12000
**********                           ----------
TOTAL                                     12000
SA_MAN     Zlotkey                        10500
           Cambrault                      11000
           Errazuriz                      12000
           Partners                       13500
           Russell                        14000
**********                           ----------
TOTAL                                     61000

6 rows selected.

レポート上の12,000を超える給与の合計を計算するには、次のように入力します。

COMPUTE SUM OF SALARY ON REPORT
BREAK ON REPORT
COLUMN DUMMY HEADING ''
SELECT '   ' DUMMY, SALARY, EMPLOYEE_ID
FROM EMP_DETAILS_VIEW
WHERE SALARY > 12000
ORDER BY SALARY;
        SALARY EMPLOYEE_ID
--- ---------- -----------
         13000         201
         13500         146
         14000         145
         17000         101
         17000         102
         24000         100
    ----------
sum      98500

6 rows selected.

管理部門および経理部門の中での給与の平均と最高額を計算するには、次のように入力します。

BREAK ON DEPARTMENT_NAME SKIP 1
COMPUTE AVG LABEL 'Dept Average' -
        MAX LABEL 'Dept Maximum' -
        OF SALARY ON DEPARTMENT_NAME
SELECT DEPARTMENT_NAME, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE DEPARTMENT_NAME IN ('Executive', 'Accounting')
ORDER BY DEPARTMENT_NAME;
DEPARTMENT_NAME                LAST_NAME                     SALARY
------------------------------ ------------------------- ----------
Accounting                     Higgins                        12000
                               Gietz                           8300
******************************                           ----------
Dept Average                                                  10150
Dept Maximum                                                  12000

Executive                      King                           24000
                               Kochhar                        17000
                               De Haan                        17000
******************************                           ----------
Dept Average                                             19333.3333
Dept Maximum                                                  24000

部門20以下の給与を合計し、計算ラベルを出力しないようにするには、次のようにします。

COLUMN DUMMY NOPRINT
COMPUTE SUM OF SALARY ON DUMMY
BREAK ON DUMMY SKIP 1
SELECT DEPARTMENT_ID DUMMY, DEPARTMENT_ID, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE DEPARTMENT_ID <= 20
ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME                     SALARY
------------- ------------------------- ----------
           10 Whalen                          4400
                                        ----------
                                              4400

           20 Hartstein                      13000
           20 Fay                             6000
                                        ----------
                                             19000

計算ラベルを出力せずに、レポートの終わりに給与合計額が表示されるようにするには、次のように入力します。

COLUMN DUMMY NOPRINT
COMPUTE SUM OF SALARY ON DUMMY
BREAK ON DUMMY
SELECT NULL DUMMY, DEPARTMENT_ID, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE DEPARTMENT_ID <= 30
ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME                     SALARY
------------- ------------------------- ----------
           10 Whalen                          4400
           20 Hartstein                      13000
           20 Fay                             6000
           30 Raphaely                       11000
           30 Khoo                            3100
           30 Baida                           2900
           30 Tobias                          2800
           30 Himuro                          2600
           30 Colmenares                      2500
                                        ----------
                                             48300

9 rows selected.