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

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

グループ化と集計

集計関数は単独で使うより、WHERE句による絞り込みやGROUP BY句によるグループ化と組み合わせて使うと、さらに複雑な集計を行えます。


- 絞り込んで集計する -

WHERE句を使ってレコードを絞り込んでから集計関数を使うこともできます。

例えば、テーブル「累積売上_fx」から女性との取引件数を取得するなら、以下のようなSQLとなります。

 SELECT COUNT(商品ID) FROM 累積売上_fx
 WHERE 性別='女'

WHERE句でレコードを『女性だけ』に絞り込んだ上で、COUNT関数を使います。


以下のSQLは、テーブル「累積売上_fx」から男性顧客との取引額の平均を求めます。

 SELECT AVG(金額) FROM 累積売上_fx
 WHERE 性別='男'



- グループ化して集計する -

集計関数は、基本的にGROUP BY句によるグループ化と組み合わせて使用します。ここまでに紹介した使い方ではグループ化を行っていないため、対象となるレコード群はまとめられていないままの状態です。

グループ化していない場合、集計関数の結果だけがフィールドとして取得されます。それ以外のフィールドを表示させたい場合、そのフィールドを対象としたグループ化を行わなければなりません。

以下のSQLは、テーブル「累積売上_fx」の「性別」フィールドでグループ化を行い、COUNT関数で各グループごとのレコード件数を求めます。「性別」フィールドをキーにしているためレコード群は「男/女」の2つのグループに分かれ、それぞれの取引件数が表示されます。

 SELECT 性別, COUNT(伝票番号) FROM 累積売上_fx
 GROUP BY 性別



- グループ化の例 -

グループ化して集計する例を紹介しておきます。

・男女別の取引額の合計

 SELECT 性別, SUM(金額) FROM 累積売上_fx
 GROUP BY 性別

「性別」フィールドでグループ化し、SUM関数でそれぞれのグループの取引額の合計を求めています。


・顧客ごとの取引額の平均

 SELECT 氏名, AVG(金額) 平均額
 FROM 累積売上_fx
 GROUP BY 氏名

「氏名」フィールドで顧客の名前ごとにグループ化し、AVG関数でそれぞれのグループの取引額の平均を求めています。




トップページ
SUM関数とグループ化
集計関数の使用例
グループ化と集計
絞り込んで集計する
グループ化して集計する
グループ化の例
HAVING句による絞り込み
グループ化と集計の例
DISTINCTオプション
あとがき
Copyright © MESCIUS inc. All rights reserved.