データをグループ化
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」カラムの値の平均を計算しその結果を取得します。
サンプル
では実際に試してみます。
次のようなデータが格納されたテーブルを対象にします。
それでは「category」カラムの値でグループ化を行い、「category」カラムの値を取得してみます。
select category from pricelist group by category;
取得したデータの数はグループの数と同じになります。
ではグループ毎に「price」カラムの値を平均した結果を取得します。
select category, avg(price) as heikin from pricelist group by category;