データベース千夜一夜第19回

データの集計(1)~グループ化と集計の基礎 長谷川裕行
有限会社 手國堂

レコード数を数える

先述した値の合計などは、集計関数と呼ばれる関数を使って求めます。SELECT命令でフィールド名の代わりに集計関数を記述すれば、関数を実行した結果(値の合計や平均など)を得られます。レコード数を数えるCOUNT関数を例に、集計の基本を理解しましょう。


- COUNT関数でレコードを数える -

レコード数を数えるにはCOUNT関数を用います。書式は以下のようになります。

 COUNT(<フィールド>)

引数の<フィールド>で指定したフィールドに値の入っている、レコードの数を返します。空白やNULL値は計算されません。

単純に全レコード数を数えるなら、引数に「全フィールド」を意味する*を充てて、次のようなSQLを記述します。

 SELECT COUNT(*) FROM 商品_mr

結果が「列名なし」として表示されるので、これに「件数」という見出し(エイリアス)を充てておきましょう、以下のようにします。

 SELECT COUNT(*) AS 件数 FROM 商品_mr

クエリアナライザで表示するだけなら、わざわざエイリアスを付ける必要はありません。しかし、アプリケーションで集計処理を行う場合、エイリアスを付けて集計処理の意味を明確にしておいた方が便利です。



- グループ化して数える -

COUNT関数をGROUP BY句によるグループ化と組み合わせると、グループ化してまとめられたレコード群(キーフィールドに同じ値を持つレコードの集合)のレコード数を計算できます。

「vw在庫一覧」を仕入先ごとにグループ化し、各仕入先から仕入れている商品点数(商品の種類の数)がいくつかを知るには、以下のようなSQLを記述します。

 SELECT 仕入先名, COUNT(商品ID) AS 商品数
 FROM vw在庫一覧
 GROUP BY 仕入先名

ここでは「COUNT(商品ID)」として「商品ID」フィールドの値を数えていますが、レコード数を数えるだけなので他のフィールドを引数にしても結果は同じです。また、AS句で「商品数」というエイリアスを与えています。



- データの種類を数える -

COUNT関数では、引数に与えるフィールド名の前にDISTINCTオプションを付けると、同じ値を1件として計算し、結果として全レコードを通して指定したフィールドに何種類の値があるのかを調べられます。

仕入先が何件あるかを知るには、以下のようなSQLで「商品_mr」の「仕入先ID」の値が何種類あるかを調べます。

 SELECT COUNT(DISTINCT 仕入先ID) AS 仕入先件数
 FROM 商品_mr



あとがき

集計関数にはこの他にもいくつかあり、GROUP BY句によるグループ化と組み合わせると様々な集計が行えます。各関数の書式と具体例は次回詳しく紹介することにして、今回は最後に「vw在庫一覧」から「商品在庫数の合計を各仕入先ごとにまとめる」ためのSQLを紹介しておきましょう。

フィールドの値を合計するにはSUM関数を用います。引数にはフィールドを指定し、そのフィールドの値の合計が返されます。このときGROUP BY句でレコードをグループ化していれば、グループごとの合計を得られます。

 SELECT 仕入先名, SUM(在庫) AS 在庫合計
 FROM vw在庫一覧
 GROUP BY 仕入先名



ダウンロードサンプルファイル (LZH形式 1.12KB)



トップページ
集計処理の重要性
レコードのグループ化
ビューのグループ化
レコード数を数える
COUNT関数でレコードを数える
グループ化して数える
データの種類を数える
あとがき
Copyright © MESCIUS inc. All rights reserved.