omachizura

SQLの基本的なことからスタートし、高度な検索・集計方法などの応用テクニックまでできるスキルを紹介します。


HAVING句で集計したデータに対して絞り込みを行う

「社員マスタ」と「売上明細」というテーブルがあります。売上明細テーブルには、社員の売上情報が格納されています。

社員マスタ
社員コード社員名部署コード年齢
1テスト社員1122
2テスト社員2230
3テスト社員3null20
売上明細
売上NO社員コード売上日売上金額
1120150401200
2120150402300
3220150408100
4220150501150
5320150505550

課題

売上の合計が500円以上の社員を表示したい。

SQLは下記のようになります。

SELECT MAX(T1.社員名) AS 社員名
  ,SUM(T2.売上金額) AS 売上金額
FROM 社員マスタ AS T1
  LEFT JOIN 売上明細 AS T2
  ON T1.社員コード = T2.社員コード
GROUP BY T1.社員コード
HAVING 売上金額 >= 500
実行結果
社員名売上金額
テスト社員1500
テスト社員3550

GROUP BYで集計したデータを絞り込むにはHAVING句を使用します。

HAVING句ではSELECT句で指定した列名を指定します。

HAVING句とWHERE句の違い

試しに売上金額 >= 500をHAVING句の代わりにWHERE句で指定してみます。

SELECT MAX(T1.社員名) AS 社員名
  ,SUM(T2.売上金額) AS 売上金額
FROM 社員マスタ AS T1
  LEFT JOIN 売上明細 AS T2
  ON T1.社員コード = T2.社員コード
WHERE T2.売上金額 >= 500
GROUP BY T1.社員コード
実行結果
社員コード社員名売上金額
3テスト社員3550

テスト社員1のデータが出力されません。WHERE句はGROUP BY句で集計する前に判定されるため、テスト社員1の売上金額200、300のデータは集計対象外(出力対象外)になります。





前へ
1

前へ
1