これをマスター
マスター 売上をピボットしようテーマ
売上を金額のレンジごとに集計してみよう
テーブル: 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/1/20 | 3 | 46 | 2 | 500 |
4 | 32 | 4/1/20 | 4 | 23 | 2 | 500 |
5 | 33 | 4/1/20 | 4 | 34 | 1 | 245 |
6 | 39 | 4/1/20 | 4 | 32 | 1 | 300 |
7 | 50 | 4/1/20 | 5 | 49 | 2 | 600 |
8 | 53 | 4/1/20 | 5 | 60 | 1 | 375 |
9 | 59 | 4/1/20 | 5 | 51 | 2 | 600 |
10 | 62 | 4/1/20 | 5 | 49 | 2 | 600 |
結果: (スペース都合で5行のみ表示) | ||||||
店舗ID | ボリューム | |||||
1 | 3 | 3 | ||||
2 | 4 | 3 | ||||
3 | 5 | 4 | ||||
4 | ||||||
5 |
はじめに
SQLでピボットテーブルのような集計をする際には
GROUP BYというコマンドと
集計演算子の組み合わせで行います
GROUP BY はどのカラムを基本として集計をするかをしてします
上の例は、[店舗ID]ごとに売上の回数が何回だったかを集計しています
それぞれ、店舗 3が3個、店舗 4が3個、店舗 5が4個の注文がある事が分かります
実務で使う場合は、店舗をIDだけで出すと読みづらいので
店舗テーブルなどとジョイン(掛け合わせ)て実際の店舗名などを表示します
ORDER BY
GROUP BY でカラムを元に集計した場合
表示される結果はカラムの内容のアルファベットや数字の順番に表示され
内容によっては非常に見づらくなったりします
その場合ORDER BYが一緒に使われます
ORDER BYは、並べ替えるカラムをコンマで区切ってならべていくと
その順番で結果をソートしてくれます
Excelのソート機能と同等です
SELECT [店舗ID], [取引日]
COUNT( [取引ID]) AS ボリューム
FROM sales
GROUP BY [店舗ID], [取引日]
ORDER BY [店舗ID], [取引日]
店舗ID、取引日でグループして、店舗ID、取引日で並べ替える
(用途にもよりますが) ORDER BYはGROUP BYをコピーして
同じカラムを指示する事が多いです
もう一歩
売上を金額レンジでそれぞれ
個数、合計、最大、最小、平均値を出してみましょう
テーブル: 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/1/20 | 3 | 46 | 2 | 500 |
4 | 32 | 4/1/20 | 3 | 23 | 2 | 500 |
5 | 33 | 4/1/20 | 3 | 34 | 1 | 245 |
6 | 39 | 4/1/20 | 3 | 32 | 1 | 300 |
7 | 50 | 4/1/20 | 3 | 49 | 2 | 600 |
8 | 53 | 4/1/20 | 3 | 60 | 1 | 375 |
9 | 59 | 4/1/20 | 3 | 51 | 2 | 600 |
10 | 62 | 4/1/20 | 3 | 49 | 2 | 600 |
結果: (スペース都合で5行のみ表示) | ||||||
レンジ | ボリューム | 合計 | 最小 | 最大 | 平均 | |
1 | 300円未満 | 2 | 795 | 245 | 250 | 248 |
2 | 300円以上 | 2 | 675 | 300 | 375 | 337.5 |
3 | 500円以上 | 6 | 3500 | 500 | 700 | 583.3 |
4 | ||||||
5 |