ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

2.5.1 集合関数指定

機能

集合関数指定は、値の合計、平均などの集計を行う関数です。

記述形式

参照項番

一般規則

COUNT(*)
  • COUNT(*)を指定した場合、集合関数の引数となる値は、表の全行となります。

AVG
  • AVGを指定した集合関数の結果は、引数の平均となります。

MAXまたはMIN
  • MAX、またはMINを指定した集合関数の結果は、引数の最大値または最小値となります。

  • MAX、またはMINを指定した集合関数の引数のデータ型が文字列、または各国語文字列の場合は、そのデータ型を取り扱う文字コード系(EUCコード、シフトJISコードまたはUNICODE)に基づいて表現したときの数値で比較した結果となります。

SUM
  • SUMを指定した集合関数の結果は、引数の合計となります。

COUNT
  • COUNTを指定した場合、集合関数の結果は、引数となる値の個数となります。引数となる値が空集合の場合、0となります。

DISTINCT
  • DISTINCTを指定した場合、集合関数の引数となる値は、値式の結果がNULL値の場合、それを取り除き、重複する値がある場合は重複を取り除き1つにした結果の集合となります。

ALL
  • ALLを指定した場合、集合関数の引数となる値は、値式の結果がNULL値の場合、それを取り除いた結果の集合となります。

値式
  • 引数の値式には、列指定が1つ以上指定されていることが必要です。

  • 集合関数の引数が外への参照である場合、値式に演算子を指定することはできません。外への参照は、“2.4 列指定”を参照してください。

  • AVG、MAX、MIN、またはSUMを指定した集合関数の引数となる値が空集合の場合、結果はNULLとなります。

  • 引数の値式に、集合関数、動的パラメタ指定、順序を指定することはできません。

その他の一般規則
  • BLOB型は、ALLを指定したCOUNT以外の集合関数に指定することはできません。

  • 集合関数の実行結果のデータ型は引数のデータ型により異なります。以下に集合関数の引数のデータ型と結果のデータ型を示します。引数の値式が演算子を含んでいる場合には、値式のデータ変換規則に従って変換した結果が引数のデータ型となります。値式は“2.11 値式”を参照してください。

    表2.17 集合関数の引数のデータ型と結果のデータ型

    関数

    引数データ型

    結果データ型

    AVG

    INTEGER

    DECIMAL(12,2) (注)

    SMALLINT

    DECIMAL(7,2) (注)

    DECIMAL(p,q)

    DECIMAL(m,n)
    m: MIN(18,p+2)
    n: MIN(18-(p-q),q+2)

    NUMERIC(p,q)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

    INTERVAL

    INTERVAL

    MAX

    INTEGER

    INTEGER

    SMALLINT

    SMALLINT

    DECIMAL(p,q)

    DECIMAL(p,q)

    NUMERIC(p,q)

    NUMERIC(p,q)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

    CHARACTER

    CHARACTER

    VARCHAR

    VARCHAR

    NCHAR

    NCHAR

    NCHAR VARYING

    NCHAR VARYING

    DATE

    DATE

    TIME

    TIME

    TIMESTAMP

    TIMESTAMP

    INTERVAL

    INTERVAL

    MIN

    INTEGER

    INTEGER

    SMALLINT

    SMALLINT

    DECIMAL(p,q)

    DECIMAL(p,q)

    NUMERIC(p,q)

    NUMERIC(p,q)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

    CHARACTER

    CHARACTER

    VARCHAR

    VARCHAR

    NCHAR

    NCHAR

    NCHAR VARYING

    NCHAR VARYING

    DATE

    DATE

    TIME

    TIME

    TIMESTAMP

    TIMESTAMP

    INTERVAL

    INTERVAL

    SUM

    INTEGER

    INTEGER (注)

    SMALLINT

    DECIMAL(p,q)

    DECIMAL(m,n)
    m: MIN(18,p+7),
    n: q

    NUMERIC(p,q)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

    INTERVAL
    時間隔先行フィールド精度: p

    INTERVAL
    時間隔先行フィールド精度: MIN(9,p+7)

    COUNT

    -

    INTEGER

p: 精度

q: 位取り

- : すべてのデータ型

注) 中間精度は、INTEGERです。

使用例

表T1に対して集合関数を使用して検索した例を示します。

1

COUNT(*)を指定した例です。

SELECT COUNT(*) FROM T1
         ↓  結果
         5

この例では、表T1の行数を求めています。関数COUNT(*)では、NULL値を含んだ行もカウントするので、この結果は5となります。

2

DISTINCTを指定した例です。

COUNTでは、NULL値を除き、また同じ値の列を1個にします。そのため、結果は3となります。

SUMでも、引数を同様に扱うので結果は70となります。


3

ALLを指定した例です。

この例では、SUMとAVGを使用しています。NULL値を除いた値に対して、それぞれの関数が適用されます。結果として、それぞれ、90、60となります。


4

GROUP BY句とHAVING句を併用した例です。

この例では、まずGROUP BY句によってC3の値でグループ分けして、HAVING句により行数が2以上のグループを選び出します。結果として、C3がXでありSUM結果が50の行とC3がYでありSUM結果が40の行の2行となります。