集計関数には、引数に指定した行セットのデータに基づいて算出される値を指定します。カッコで囲まれたパラメータは式を表します。
選択リストまたはHAVING句に集計関数を指定できます。 詳細は、「INSERT...SELECT」を参照してください。式の値は、WHERE句の条件を満たす各行を使用して計算されます。
SQL構文
{AVG ({Expression
| [ALL | DISTINCT]ColumnName
}) MAX ({Expression
| [ALL | DISTINCT]ColumnName
| ROWID}) MIN ({Expression
| [ALL | DISTINCT]ColumnName
| ROWID}) SUM ({Expression
| [ALL | DISTINCT]ColumnName
}) COUNT ({ * | [ALL | DISTINCT]ColumnName
| ROWID}) }
構成要素 | 説明 |
---|---|
Expression |
集計関数の引数を指定します。式自体を集計関数として指定することはできません。 |
AVG | 引数の値の平均値を計算します。NULL値は無視されます。AVG関数は、数値データ型に対してのみ適用できます。 |
MAX | 引数の値の最大値を検索します(英数字型のASCII比較)。NULL値は無視されます。MAXは、数値、文字およびBINARYデータ型に適用できます。 |
MIN | 引数の値の最小値を検索します(英数字型のASCII比較)。NULL値は無視されます。MINは、数値、文字およびBINARYデータ型に適用できます。 |
SUM | 引数の値の合計を計算します。NULL値は無視されます。SUMは、数値データ型に対してのみ適用できます。 |
COUNT * | WHERE句を満たす行の数を、NULL値の行も含めてカウントします。結果のデータ型はTT_INTEGERです。表の行数の詳細は、SYS.TABLESのNUMTUPSフィールドの説明を参照してください。 |
COUNT
|
特定の列のすべての行をカウントします。NULL値を含む行はカウントされません。結果のデータ型はTT_INTEGERです。表の行数の詳細は、SYS.TABLESのNUMTUPSフィールドの説明を参照してください。 |
ALL | 集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 |
DISTINCT | 集計関数の引数から、重複する列の値を削除します。2つ以上の列に対して指定できます。 |
説明
GROUP BY句を使用しない空の表で集計関数を計算すると、結果は次のようになります。
COUNTは0を返します。
AVG、SUM、MAX、MINはNULLを返します。
空のグループまたはグループ化された空の表(GROUP BYを使用)で集計関数を計算すると、結果は次のようになります。
COUNTは何も返しません。
AVG、SUM、MAX、MINは何も返しません。
SUMの場合は、次のようになります。
ソースがTT_TINYINT、TT_SMALLINTまたはTT_INTEGERの場合、結果のデータ型はTT_INTEGERです。
ソースがNUMBERの場合、結果のデータ型は精度とスケールが定義されていないNUMBERになります。
ソースがTT_DECIMALの場合、結果のデータ型は最大精度が定義されたTT_DECIMALになります。
その他のすべてのデータ型の場合、結果のデータ型はソースと同じになります。
MAXおよびMINの場合は、次のようになります。
結果のデータ型はソースと同じになります。
AVGの場合は、次のようになります。
AVGは、SUM/COUNTとして評価されます。結果のデータ型は、DIV演算子に適用されるルールを使用して導出されます。
次の項目の詳細は、第1章「データ型」を参照してください。
集計関数の評価において実行される切捨てとデータ型の変換。
数値引数を含む集計関数の精度とスケール。
集計関数の結果のデータ型の制御。
例
HRスキーマで従業員の平均給与を計算します。CASTを使用して平均を列のデータ型としてキャストします。
Command> SELECT CAST(AVG (salary) AS NUMBER (8,2)) FROM employees; < 6461.68 >
HRスキーマで従業員の最大給与を計算します。
Command> SELECT MAX (salary) FROM employees; < 24000 > 1 row found.
この例では、DESCRIBEを使用して、SUM集計使用時に返されるデータ型を示します。 表aggregates
が作成され、別のデータ型の列が定義されます。
Command> CREATE TABLE aggregates (col1 TT_TINYINT, col2 TT_SMALLINT, col3 TT_INTEGER, col4 TT_BIGINT, col5 NUMBER (4,2), col6 TT_DECIMAL (6,2), col7 BINARY_FLOAT, col8 BINARY_DOUBLE); Command> DESCRIBE SELECT SUM (col1) FROM aggregates; Prepared Statement: Columns: EXP TT_INTEGER Command> DESCRIBE SELECT SUM (col2) FROM aggregates; Prepared Statement: Columns: EXP TT_INTEGER Command> DESCRIBE SELECT SUM (col3) FROM aggregates; Prepared Statement: Columns: EXP TT_INTEGER Command> DESCRIBE SELECT SUM (col4) FROM Aggregates; Prepared Statement: Columns: EXP TT_BIGINT Command> DESCRIBE SELECT SUM (col5) FROM aggregates; Prepared Statement: Columns: EXP NUMBER Command> DESCRIBE SELECT SUM (col6) FROM aggregates; Prepared Statement: Columns: EXP TT_DECIMAL (40,2) Command> DESCRIBE SELECT SUM (col7) FROM aggregates; Prepared Statement: Columns: EXP BINARY_FLOAT Command> DESCRIBE SELECT SUM (col8) FROM Aagregates; Prepared Statement: Columns: EXP BINARY_DOUBLE