U-style MySQL独学日記  Since2001 メニューに戻る SQLメニューに戻る
タイトル集約関数を使う
文書管理番号 作成日 分類1 分類2 キーワード
SQL0004 2002-10-15 関数   select sum max min avg count

今回は集約関数というものを学習します。集約とは、集めてまとめることで、例えば合計を出すときには全データを足すように、集めてひとつの結果を出すのが集約関数のようです。

下記は今回の学習に使うデータ定義です。
shop_proceedsは店舗売上です。
shop_noは店舗番号です。
shop_nameは店舗名です。
salesは店舗ごとの売上です。

stadydb=# create table shop_proceeds(
stadydb(# shop_no int,
stadydb(# shop_name char(10),
stadydb(# sales int
stadydb(# );

上記を実行して

CREATE

と表示されればテーブルが作成できています。

次にデータを入力します。
insert into テーブル名 values(列1、列2、・・・);の調子で入力します。

stadydb=# insert into shop_proceeds values(1, 'shop_A', 300);
INSERT 18775 1
stadydb=# insert into shop_proceeds values(2,'shop_B',200);
INSERT 18776 1
stadydb=# insert into shop_proceeds values(3,'shop_C',100);
INSERT 18777 1
stadydb=# insert into shop_proceeds values(4,'shop_D',600);
INSERT 18778 1
stadydb=# insert into shop_proceeds values(5,'shop_E',400);
INSERT 18779 1
stadydb=# insert into shop_proceeds values(6,'shop_F',90);
INSERT 18780 1

次に入力したデータを確認します。
select文を使います。
select * from テーブル名;(*は全ての列を表します。)

stadydb=# select * from shop_proceeds;
shop_no | shop_name | sales
---------+------------+-------
1 | shop_A | 300
2 | shop_B | 200
3 | shop_C | 100
4 | shop_D | 600
5 | shop_E | 400
6 | shop_F | 90
(6 rows)

ちゃんと6件入っていればOKです。

次はいよいよ集約関数 SUMを使って全データの合計を求めます。集約関数はselect文と一緒に使います。
select 関数名(関数を適用する列名)from テーブル名;
下記では全店売上を求めています。

stadydb=# select sum(sales) from shop_proceeds;
sum
------
1690
(1 row)

--集約関数 Maxを使って全データから最大の値を求めます。()内がsalesになっているので
salesの最大値が求められます。つまり一番売上のよいお店の売上を求めます。

stadydb=# select max(sales) from shop_proceeds;
max
-----
600
(1 row)

--同じく最小値を求めます。

stadydb=# select min(sales) from shop_proceeds;
min
-----
90
(1 row)

--次は平均を求めます。

stadydb=# select avg(sales) from shop_proceeds;
avg
----------------
281.6666666667
(1 row)

--データの件数を求めます。

stadydb=# select count(shop_no) from shop_proceeds;
count
-------
6
(1 row)

--集約したデータを表示するときにただ関数名が表示されるのではなんの集約なのかがわかり
にくい場合があります。例えば上記のMaxは何の最大値かがわかりにくいです。上記では600
となっていますが。もしかしたら店舗番号の最大値かもしれません。そんなときは ASを使って
結果表示の見出し(?)を変更することができます。

stadydb=# select max(sales) as max_sales from shop_proceeds;
max_sales
-----------
600
(1 row)

ここではMaxをわかりやすくするためにMax(sales)の結果の見出しをmax_salesに置き換えています