初詣合格祈願SQL講座

SQL講座 複数の表の連携3

目指せ!SQL

初詣合格祈願SQL講座 複数の表の連携3

グループ化する(GROUP BY 句)

GROUP BY句で指定した列の値を使って、グループ化することができます。また、グループごとに演算も可能です。

記述形式 SELECT 列名1,列名2,〜列名n ・・・ グループごとに結果が1つになる列や関数を記述する
FROM 表名1,表名2,表名n
WHERE 抽出条件
GROUP BY 列名1,列名2 ・・・ ここで指定された列の値でグループ化がおこなわれる

<例題>
売上明細と商品表から伝票ごとの売上金額合計を求める。売上金額は単価*数量で計算する。

商品表(主キー:商品コード)
商品CD商品名単価
10鉛筆30
20消しゴム50
30シャープペン250
40ボールペン150
50色鉛筆700
60ノート100

売上No日付顧客CD
12001/05/27105
22001/05/27101
32001/05/27103
42001/06/27102
52001/06/27104

売上明細(主キー:売上No,連番)
売上No連番商品CD数量
111010
12307
136025
212015
22403
31308
324030
335012
346050
412021
424021
511017
52205

顧客表(主キー:顧客CD)
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事

SELECT 売上No,SUM(単価*数量) ← 売上Noと売上金額合計を表示
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD ← 商品表の商品CDと売上明細の商品CDが一致する行を結合
GROUP BY 売上No ← 売上Noでグループ化をおこなう

実行結果
売上No
14550
21200
319900
43600
5760

売上Noごとの売上金額の合計が求められている。前の売上金額を計算する表の実行結果を参照するとグループ化と集計されていることがよく分かる。

例題SELECT文の実行順序は次のとおりです。

  1. FROM句で記述されている「商品表」と「売上明細」を読み込む
  2. WHERE句で記述されている商品表の商品CDと売上明細の商品CDが一致する行を抽出
  3. 売上Noでグループ化をおこなう
記述形式中の”グループごとに結果が1つになる列や関数を記述する”の意味ですが、グループ化をおこなうことでまとめることが可能な列という意味です。この場合では、売上明細の「連番」や「商品CD」はグループ化してまとめることができないので指定することはできません。(指定するとグループ化がおこなえないという意味です)
 例題のSELECT句の中でSUMという関数が使用されています。これはグループ集計をおこなう関数です。SUMの他に次の関数が使用できます。

グループ集計をおこなう関数
関数はたらき
SUM合計を求める
AVG平均を求める
MAX最大値を求める
MIN最小値を求める
COUNTレコード数を数える

使用方法はSUMと同じです。例題のSUM関数の使い方を参考にしてください。



初詣合格祈願SQL講座ページTOPに戻る