Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.23.3 COUNT

行数(件数)を求めます。

〈この項の構成〉

(1) 指定形式

一般集合関数COUNT::={COUNT(〔ALL〕 値式)|COUNT(DISTINCT 値式)}

(2) 指定形式の説明

COUNT(〔ALL〕 値式)

値式を指定します。値式については,「7.21 値式」を参照してください。

ALLは省略できます。指定のありなしに関係なく結果は同じになります。

COUNT(DISTINCT 値式)

値式を指定します。値式については,「7.21 値式」を参照してください。値が同じ行は重複してカウントされません。

なお,DISTINCTを指定した場合,値式には配列データを指定できません。

上記2つの指定形式の実行結果の違いを例を使って説明します。GROUP BY句を指定しない場合と,GROUP BY句を指定する場合に分けて説明します。

(a) 例1 GROUP BY句を指定しない場合

[図データ]

上記の社員表(EMPLIST)に対して,次に示すSELECT文を実行します。

SELECT COUNT("NAME") AS "COUNT-ALL",
       COUNT(DISTINCT "NAME") AS "COUNT-DISTINCT"
    FROM "EMPLIST"

実行結果は次のようになります。

[図データ]

説明
  • COUNT(NAME)の場合,同じ名前(Taro Tanaka)についても重複してカウントします。また,ナル値の行はカウントしないため,実行結果は5になります。

  • COUNT(DISTINCT NAME)の場合,同じ名前(Taro Tanaka)については重複してカウントしません。また,ナル値の行はカウントしないため,実行結果は3になります。

(b) 例2 GROUP BY句を指定する場合

例1に示す社員表(EMPLIST)に対して,次に示すSELECT文を実行します。

SELECT "SCODE",COUNT("NAME") AS "COUNT-ALL",
       COUNT(DISTINCT "NAME") AS "COUNT-DISTINCT"
    FROM "EMPLIST"
    GROUP BY "SCODE"

実行結果は次のようになります。

[図データ]

説明
  1. COUNT(NAME)の場合,同じ名前(Taro Tanaka)についても重複してカウントするため,実行結果は3になります。COUNT(DISTINCT NAME)の場合,同じ名前(Taro Tanaka)については重複してカウントしないため,実行結果は2になります。

  2. 値が重複する行がないため,両方とも実行結果は1になります。

  3. 値が重複する行がないため,また,ナル値の行はカウントしないため,両方とも実行結果は1になります。

(3) 規則

  1. 値式には,バイナリデータを指定できません。

  2. ナル値は集計対象に含まれません。

  3. 値式に指定できるデータ型と一般集合関数COUNTの実行結果のデータ型を次の表に示します。

    表7‒20 値式に指定できるデータ型と一般集合関数COUNTの実行結果のデータ型の関係

    項番

    値式に指定できるデータ型

    一般集合関数COUNTの実行結果のデータ型

    1

    INTEGER

    INTEGER

    2

    BIGINT

    3

    SMALLINT

    4

    DECIMAL(m,n)

    5

    NUMERIC(m,n)

    6

    DOUBLE PRECISION

    7

    FLOAT

    8

    CHARACTER(n)

    9

    VARCHAR(n)

    10

    DATE

    11

    TIME(p)

    12

    TIMESTAMP(p)

    13

    ARRAY

  4. 次に示す場合,実行結果は0になります。

    • 入力行数が0の場合

    • 集計対象の値がすべてナル値の場合

  5. 集合関数の計算途中でオーバフローが発生した場合,オーバフローエラーとなります。

(4) 例題

例題

販売履歴表(SALESLIST)から,2014/1/1以降に商品を購入した人数を求めます。同じ人が複数回購入している場合は,全部で1人とカウントします。

SELECT COUNT(DISTINCT "USERID") AS "COUNT"
    FROM "SALESLIST"
        WHERE "PUR-DATE">=DATE'2014-01-01'

実行結果の例

[図データ]