2012年8月17日金曜日

5.2 データの検索(2)

5.2.3 グループ化


列のデータが同じレコードをまとめることをグループ化といいます。グループ化はGROUP BY句を使います。
SELECT 列名FROM テーブル名GROUP BY グループ化する列名;
次の例では、bid列が同じレコードをグループ化して表示しています。

mysql> SELECT * FROM staff;
+----+-----------+------+------+
| id | name | age | bid |
+----+-----------+------+------+
| 1 | Sato | 23 | 1 |
| 2 | Suzuki | 24 | 2 |
| 3 | Takahashi | 28 | 1 |
| 4 | Tanaka | 26 | 3 |
| 5 | Watanabe | 30 | 2 |
+----+-----------+------+------+
mysql> SELECT * FROM staff GROUP BY bid;
+----+--------+------+------+
| id | name | age | bid |
+----+--------+------+------+
| 1 | Sato | 23 | 1 |
| 2 | Suzuki | 24 | 2 |
| 4 | Tanaka | 26 | 3 |
+----+--------+------+------+

この例では、bid列が共通しているレコードの中から1レコードだけが抽出
されています。グループ化は、次に述べる集合関数を使って、合計や平均
を計算する場合に使います。

5.2.4 集合関数


集合関数を使うと、抽出した結果を集計したり、検索条件にマッチしたレコ
ードの中から平均値や最大値を計算したりすることができます。集合関数に
は、表のようなものがあります。




主な集合関数

AVG(列名) 平均値を計算する
COUNT(列名) レコード数をカウントする
COUNT(DISTINCT 列名) 重複なしでレコード数をカウントする
MAX(列名) 最大値を調べる
MIN(列名) 最小値を調べる
SUM(列名) 合計を計算する

例を見てみましょう。次のようなテーブルを例に取ります。

mysql> SELECT * FROM members;
+-----------+----------+------+
| name | address | age |
+-----------+----------+------+
| Sato | Tokyo | 23 |
| Suzuki | Tokyo | 24 |
| Takahashi | Kanagawa | 28 |
| Tanaka | Kanagawa | 26 |
| Watanabe | Tokyo | 30 |
+-----------+----------+------+

addressごとにage列の合計を表示するには、SUM()関数を使います。

mysql> SELECT address,SUM(age) FROM members
GROUP BY address;
+----------+----------+
| address | SUM(age) |
+----------+----------+
| Kanagawa | 54 |
| Tokyo | 77 |
+----------+----------+

今度は、AVG()関数を使って平均を計算してみます。

mysql> SELECT address,AVG(age) FROM members
GROUP BY address;
+----------+----------+
| address | AVG(age) |
+----------+----------+
| Kanagawa | 27.0000 |
| Tokyo | 25.6667 |
+----------+----------+

COUNT()関数を使うとレコード数をカウントできます。

mysql> SELECT address,COUNT(name) FROM members
GROUP BY address;
+----------+-------------+
| address | COUNT(name) |
+----------+-------------+
| Kanagawa | 2 |
| Tokyo | 3 |
+----------+-------------+





0 件のコメント:

コメントを投稿