これをマスター
マスター HAVINGで集計結果をさらにフィルターテーマ
売上条件を満たしていた日だけ探す
テーブル: sales | ||||||
取引ID | 取引日 | 店舗ID | 商品ID | 個数 | 合計金額 | |
1 | 7 | 4/1/20 | 3 | 52 | 1 | 250 |
2 | 11 | 4/1/20 | 3 | 27 | 2 | 700 |
3 | 19 | 4/5/20 | 3 | 46 | 2 | 400 |
4 | 32 | 4/11/20 | 4 | 23 | 2 | 360 |
5 | 33 | 4/16/20 | 4 | 34 | 1 | 245 |
6 | 39 | 4/21/20 | 4 | 32 | 1 | 300 |
7 | 50 | 5/1/20 | 5 | 49 | 2 | 600 |
8 | 53 | 5/1/20 | 5 | 60 | 1 | 375 |
9 | 59 | 5/11/20 | 5 | 51 | 2 | 600 |
10 | 62 | 5/21/20 | 5 | 49 | 2 | 600 |
結果: (スペース都合で5行のみ表示) | ||||||
取引日 | 合計 | |||||
1 | 4/1/20 | 950 | ||||
2 | 5/1/20 | 975 | ||||
3 | 5/11/20 | 600 | ||||
4 | 5/21/20 | 600 | ||||
5 |
はじめに
HAVINGは、GROUP BYで集計した結果を
さらにフィルター出来る機能です
Excelで言うと
ピボットテーブルの結果を
フィルターして該当したデータだけ表示するイメージです
サンプルでは日ごとの合計をまず集計して
その結果のうち
500円を超えた日だけを抽出しています
詳しく
HAVING 検索条件サンプルを見ていきましょう
ここではまず
SELECT [取引日], SUM([合計金額]) AS 合計
FROM sales
GROUP BY [取引日]
GROUP BY と SUM で
日毎の合計売上を出しています
GROUP BYの後に
HAVING SUM([合計金額]) > 500
を足すことで
集計結果のSUM([合計金額]) が500を超える
データにフィルターしています
考え方はシンプルで
SELECTの後に使った集計関数 ( SUM, COUNT, AVGなど )と
フィルターした条件 ( 大きい, 小さい, イコール > < = など)を
HAVINGの後に書き加えるだけです
別バターン
合計で無く回数で集計する場合
SELECT [取引日], COUNT([合計金額]) AS 合計
FROM sales
GROUP BY [取引日]
HAVING COUNT([合計金額]) >= 2
COUNTでフィルターをしてあげると
N回以上の売上があった
とする事も出来ます