集計関数は単独で使うより、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関数でそれぞれのグループの取引額の平均を求めています。
|
|
|