データをグループ化

count関数sum関数などを使ってカラムの値を集計する場合、集計はグループ単位で行われます。グループとは特定のカラムに格納されている同じ値を持つデータをまとめたもので、どのカラムを対象にグループ化するのかを指定するにはGROUP BY句を使用します。書式は次の通りです。

SELECT カラム名, ... FROM テーブル名
 GROUP BY カラム名, カラム名, ...;

GROUP BY句の後にカラム名を指定すると、そのカラム名に格納されている値が同じデータをグループとしてまとめます。複数のカラム名を指定した場合、複数のカラムの値の組み合わせが同じデータをグループとしてまとめます。

グループ化するとSELECT文で取得できるデータはグループの数だけとなります。そこでグループ化を行った場合には、グループ化に指定したカラムの値や、用意された関数を使ってカラムの値をグループ単位で集計した結果などを取得することができます。

具体的には次のようになります。

select category from goodslist group by category;

このSELECT文ではgoodslistテーブルの「category」カラムの値でグループ化を行い、グループ毎に「category」カラムの値を取得します。

select avg(price) from goodslist group by category;

このSELECT文ではgoodslistテーブルの「category」カラムの値でグループ化を行い、グループ毎に「price」カラムの値の平均を計算しその結果を取得します。

サンプル

では実際に試してみます。

次のようなデータが格納されたテーブルを対象にします。

p14-1

それでは「category」カラムの値でグループ化を行い、「category」カラムの値を取得してみます。

select category from pricelist group by category;

p14-2

取得したデータの数はグループの数と同じになります。

ではグループ毎に「price」カラムの値を平均した結果を取得します。

select category, avg(price) as heikin from pricelist group by category;

p14-3