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"
実行結果は次のようになります。
- 説明
-
-
COUNT(NAME)の場合,同じ名前(Taro Tanaka)についても重複してカウントするため,実行結果は3になります。COUNT(DISTINCT NAME)の場合,同じ名前(Taro Tanaka)については重複してカウントしないため,実行結果は2になります。
-
値が重複する行がないため,両方とも実行結果は1になります。
-
値が重複する行がないため,また,ナル値の行はカウントしないため,両方とも実行結果は1になります。
-
(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
-
次に示す場合,実行結果は0になります。
-
入力行数が0の場合
-
集計対象の値がすべてナル値の場合
-
-
集合関数の計算途中でオーバフローが発生した場合,オーバフローエラーとなります。
(4) 例題
- 例題
-
販売履歴表(SALESLIST)から,2014/1/1以降に商品を購入した人数を求めます。同じ人が複数回購入している場合は,全部で1人とカウントします。
SELECT COUNT(DISTINCT "USERID") AS "COUNT" FROM "SALESLIST" WHERE "PUR-DATE">=DATE'2014-01-01'
実行結果の例