初詣合格祈願SQL講座

SQL講座 複数の表の連携5

目指せ!SQL

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

グループ化されたデータから条件にあったグループを抽出

GROUP BY句を使用した場合はWHERE句とHAVING句の2か所で抽出条件を指定することができます。この違いは、WHERE句はグループ化前のレコードに対して、抽出条件を指定します。それに対して、HAVING句はグループ化後のグループ化されたレコードに対して抽出条件を設定します。

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

<例題>
売上明細と商品表から売上Noごとの売上金額合計を求め、売上金額が3000以上の行を抽出する。売上金額は単価*数量で計算する。

商品表(主キー:商品コード)
商品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でグループ化をおこなう
HAVING SUM(単価*数量) >=3000 ← 売上金額が3000以上の行を抽出する

売上No
14550
319900
43600

商品表の単価*数量が3000以上のレコードが表示されている

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

  1. FROM句で指定された「商品表」と「売上明細」を読み込む
  2. WHERE句で指定した条件「商品表.商品CD=売上明細.商品CD」に基づいて、商品表の商品CDと売上明細の商品CDが一致する行を抽出する
  3. GROUP BY句で指定された「売上No」でグループ化をおこなう
  4. グループ化されたレコードからHAVING句で指定された「SUM(単価*数量) >=3000」で抽出する
  5. SELECT句で指定された「売上No」と「SUM(単価*数量)」を表示する

<例題>
売上明細と商品表から売上Noごとの売上金額合計を求め、売上金額が3000以上の行を抽出する。売上金額は単価*数量で計算する。売上金額の降順で表示する。

SELECT 売上No,SUM(単価*数量) ← 売上Noと売上金額合計を表示
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD ← 商品表の商品CDと売上明細の商品CDが一致する行を結合
GROUP BY 売上No ← 売上Noでグループ化をおこなう
HAVING SUM(単価*数量) >=3000 ← 売上金額が3000以上のレコードを抽出する
ORDER BY SUM(単価*数量) DESC ← 売上金額の降順にソートする

実行結果
売上No
319900
14550
43600



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

  

戒名は死者に贈られる名前のように考えられがちですが、本来は戒律を守り仏弟子となった証としてつけるものなのです。戒名の成り立ちと宗派による違いについて説明します。
亥(い)年生まれの守護仏は、阿弥陀菩薩です。
初詣に関する質問に回答する初詣FAQ(質問と回答)です。
宮城県仙台成田山で水子供養をする際に読経している般若心経の解説です。