前回の最後に、テーブル「累積売上_fx」に記録されたレコードから『どの商品がいくつ売れているか』を調べる方法を紹介しました。このとき使ったのが、フィールドの値を合計するSUM関数です。
- 数量を合計する -
前回のSQLをもう一度紹介しておきましょう。
SELECT 仕入先_mr.仕入先名, 累積売上_fx.商品名, SUM(数量) AS 数量合計
FROM 累積売上_fx INNER JOIN
商品_mr ON 累積売上_fx.商品ID = 商品_mr.商品ID INNER JOIN
仕入先_mr ON 商品_mr.仕入先ID = 仕入先_mr.仕入先ID
GROUP BY 仕入先_mr.仕入先名, 累積売上_fx.商品名
ORDER BY 仕入先_mr.仕入先名
1行目の最後にある「SUM(数量) AS 数量合計」(アンダーラインの箇所)が、『「数量」フィールドの値をグループごとに合計する』指示で、SUMは集計関数と呼ばれる関数です。
- テーブル「累積売上_fx」の構造 -
今回は、主にテーブル「累積売上_fx」を使って、集計関数の使い方を紹介します。まず、「累積売上_fx」のフィールド構成を確認しておきましょう(前回紹介したものと同じ内容です)。すべてのフィールドで“Null”を許容していますが、基本的に「伝票番号」「伝票日付」の各フィールドにNullが記録されることはありません。
表1:テーブル「累積売上_fx」のフィールド構成
列名 |
データ型 |
長さ |
伝票番号 |
int |
4 |
伝票日付 |
datetime |
8 |
お客様ID |
int |
4 |
氏名 |
nvarchar |
30 |
読み |
nvarchar |
30 |
性別 |
nvarchar |
4 |
生年月日 |
datetime |
8 |
商品ID |
int |
4 |
商品名 |
nvarchar |
50 |
数量 |
int |
4 |
単価 |
money |
8 |
金額 |
money |
8 |
- グループ化と集計 -
先に紹介したSQLでは、仕入先の情報を表示するためJOINによる関連付けを行っているため、冗長で複雑になっています。関連付けをなくして単純にしてみましょう。
SELECT 商品名, SUM(数量) AS 数量合計
FROM 累積売上_fx
GROUP BY 商品名
GROUP BY句で「商品名」をキーにグループ化しているため、まず同じ商品名のレコードが(販売先に関係なく)ひとまとめにされます。さらにSUM関数で「数量」フィールドの値を合計しているため、ひとまとめにされた同じ商品ごとに『販売された数量』が合計されます。
数量の合計にはAS句で「数量合計」という別名(エイリアス)を設定しているため、SQLを実行すると「商品名」と「数量合計」という2つのフィールドが表示されます。
単にGROUP BY句を使ってレコード群をグループ化するだけではあまり意味がありませんが、このようにグループ化と集計関数を組み合わせることによって、様々なフィールドの値を集計できるようになります。
- 集計関数 -
集計関数には、前々回紹介したCOUNTとSUM以外にもいくつかあります。以下にまとめておきましょう。それぞれ、()内に引数としてフィールド名を与えます。
COUNT:指定したフィールドに値の入っているレコードの数を返す
SUM:指定したフィールドの値の合計を返す
AVG:指定したフィールドの値の平均値を返す
MAX:指定したフィールドの値の中から最大値を返す
MIN:指定したフィールドの値の中から最小値を返す
|
|
|