店長会議の前の日
あなたは、コンビニチェーン「ひだまりマート」の本部で働いています。大阪市内の4店舗を担当しています。
明日は店長会議です。エリアマネージャーから「店舗ごとの3日間の売上を出してください」と頼まれました。
電卓で足すこともできます。でも、店舗が100あったらどうでしょう。データベースに、グループごとの合計を出してもらいましょう。
このレッスンのゴール
メモ
SQLを使って、グループごとに行を数えたり合計したりできる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| ORDER BY | 行を、ある列の順に並べます。 | ORDER BY amount DESC |
| COUNT | 行の数を数えます。 | COUNT(*) |
| SUM | 列の値を足し合わせます。 | SUM(amount) |
| 集計 | 多くの行を1つの数にまとめることです。 | |
| GROUP BY | 同じ値の行を1つのグループにします。 | GROUP BY store |
学生が入力するセルは、このプレビューでは空白です。
ORDER BYで並べかえる
何も指定しないと、行は保存された順に出てきます。
ORDER BY を付けると、指定した列の順に並びます。大きい順は DESC、小さい順は ASC です。何も書かなければ小さい順です。
LIMIT は、出す行の数を決めます。並べてから切ると「上位3件」が取り出せます。
試そう: 売上の大きい順
-- 売上(amount)の大きい順に並べます。DESC は大きい順です。
SELECT store, day, amount FROM daily_sales ORDER BY amount DESC;
-- LIMIT 3 で、上から3行だけにします。
SELECT store, day, amount FROM daily_sales ORDER BY amount DESC LIMIT 3;
-- DESC を ASC に変えて、売上の小さい順を見てください。
COUNTは数え、SUMは足す
COUNT(*) は、行の数を数えます。SUM(amount) は、amount の値を全部足します。
どちらも、たくさんの行を1つの数にまとめます。これを集計といいます。
WHERE と組み合わせると、ある店舗だけの合計も出せます。
試そう: 数えて足す
-- 行の数を数えます。
SELECT COUNT(*) FROM daily_sales;
-- 売上を全部足します。
SELECT SUM(amount) FROM daily_sales;
-- 梅田店だけの合計です。
SELECT SUM(amount) FROM daily_sales WHERE store = '梅田店';
よくある間違い
注意
COUNT(amount) で売上の合計が出ると思う人がいます。そうではありません。COUNT は、金額がいくらでも1行を1と数えます。金額を足したいときは SUM、件数を知りたいときは COUNT を使います。
GROUP BYで店舗ごとにまとめる
全体の合計ではなく、店舗ごとの合計がほしいときは GROUP BY を使います。
GROUP BY store と書くと、同じ店舗の行が1つのグループになります。SUM や COUNT は、グループごとに計算されます。
AS を使うと、結果の列に分かりやすい名前を付けられます。
例: 店舗ごとの合計
| 店舗 | 足すもの | 日数 | 合計(円) |
|---|---|---|---|
| 梅田店 | 352,000 + 365,000 + 340,000 | 3 | 1,057,000 |
| 難波店 | 298,000 + 301,000 + 315,000 | 3 | 914,000 |
| 天王寺店 | 210,000 + 198,000 + 205,000 | 3 | 613,000 |
| 京橋店 | 150,000 | 1 | 150,000 |
学生が入力するセルは、このプレビューでは空白です。
試そう: 店舗ごとの集計
-- 店舗ごとに、日数と売上の合計を出します。
SELECT store, COUNT(*) AS days, SUM(amount) AS total
FROM daily_sales
GROUP BY store
ORDER BY total DESC;
-- GROUP BY store を GROUP BY day に変えて、日ごとの合計を見てください。