今回はいままでに紹介した関数を使って組み合わせて実務で使うようなデータ抽出をしていきます。
1つ1つは簡単ですが、コードは関数を組み合わせてこそなので使えるようにしていきましょう!
データ(sales )
ID | 日付 | カテゴリ | 購入者ID | 購入者名 | 金額 | 送料 |
---|---|---|---|---|---|---|
1 | 2025-07-01 | 家電 | 101 | 山田 | 32000 | 800 |
2 | 2025-07-01 | 衣類 | 102 | 佐藤 | 5000 | 500 |
3 | 2025-07-02 | 食品 | 103 | 鈴木 | 3000 | 300 |
4 | 2025-07-02 | 家電 | 104 | 田中 | 40000 | 1000 |
5 | 2025-07-03 | 食品 | 105 | 高橋 | 1500 | 200 |
6 | 2025-07-03 | 衣類 | 106 | 伊藤 | 7000 | 500 |
7 | 2025-07-04 | 家電 | 107 | 中村 | 28000 | 900 |
8 | 2025-07-05 | 衣類 | 108 | 小林 | 6000 | 500 |
9 | 2025-07-05 | 食品 | 109 | 加藤 | 2500 | 300 |
10 | 2025-07-06 | 食品 | 110 | 吉田 | 1800 | 200 |
11 | 2025-07-06 | 家電 | 101 | 山田 | 35000 | 1000 |
12 | 2025-07-07 | 衣類 | 102 | 佐藤 | 4500 | 500 |
13 | 2025-07-07 | 食品 | 103 | 鈴木 | 3200 | 300 |
14 | 2025-07-08 | 家電 | 104 | 田中 | 41000 | 1000 |
15 | 2025-07-08 | 食品 | 105 | 高橋 | 1600 | 200 |
16 | 2025-07-09 | 衣類 | 106 | 伊藤 | 7500 | 500 |
17 | 2025-07-10 | 家電 | 107 | 中村 | 29000 | 900 |
18 | 2025-07-10 | 食品 | 108 | 小林 | 2000 | 300 |
19 | 2025-07-11 | 食品 | 109 | 加藤 | 2800 | 300 |
20 | 2025-07-12 | 家電 | 110 | 吉田 | 36000 | 1000 |
①購入者ごとの合計金額+50000円以上の購入回数を表示
SELECT 購入者名, COUNT(*) AS 購入回数, SUM(金額) AS 合計金額 FROM sales GROUP BY 購入者名 HAVING 合計金額 >= 50000 ORDER BY 合計金額 DESC;
実行結果
購入者名 | 購入回数 | 合計金額 |
---|---|---|
田中 | 2 | 81000 |
山田 | 2 | 67000 |
中村 | 2 | 57000 |
②日付ごとの売上合計(家電かつ1万円以上のみ)+降順表示
SELECT 日付, SUM(金額 + 送料) AS 売上合計 FROM sales WHERE カテゴリ = '家電' AND 金額 >= 10000 GROUP BY 日付 ORDER BY 売上合計 DESC;
実行結果
日付 | 売上合計 |
---|---|
2025-07-08 | 42000 |
2025-07-12 | 37000 |
2025-07-06 | 36000 |
2025-07-02 | 41000 |
2025-07-01 | 32800 |
2025-07-10 | 29900 |
2025-07-04 | 28900 |
③家電または衣類で、金額+送料の合計が15000円以上の購入を対象に、購入者ごとの購入回数・総額・平均単価を表示。総額が高い順、同額なら平均単価が高い順に並べる。
SELECT 購入者名, COUNT(*) AS 購入回数, SUM(金額 + 送料) AS 総支払額, ROUND(AVG(金額 + 送料)) AS 平均単価 FROM sales WHERE (カテゴリ = '家電' OR カテゴリ = '衣類') AND (金額 + 送料) >= 15000 GROUP BY 購入者名 ORDER BY 総支払額 DESC, 平均単価 DESC;
実行結果
購入者名 | 購入回数 | 総支払額 | 平均単価 |
---|---|---|---|
田中 | 2 | 82000 | 41000 |
山田 | 2 | 68000 | 34000 |
中村 | 2 | 57900 | 28950 |
吉田 | 1 | 37000 | 37000 |
【解説】
複数の条件を組み合わせるときによく使うのが、
ANDとORです
論理回路によく用いられますね
AND:AかつB:AとBの両方の条件を満たすときのみ
OR:AまたはB:AかBのどちらかの条件を満たすとき
WHERE (カテゴリ = ‘家電’ OR カテゴリ = ‘衣類’) AND (金額 + 送料) >= 15000
ここの分で前半と後半に分けて考えましょう。
前半:カテゴリ = ‘家電’ OR カテゴリ = ‘衣類’
→これはカテゴリーが家電か衣類かのどちらかなら満たします
後半:上記文と、 (金額 + 送料) >= 15000
→これは上記と金額+送料が15000以上の両方なら満たします
【まとめ】
今まで開設した関数だけでもかなりの抽出は行えます!特に複数の希望に沿うためのANDとORはかなり使うので今後もの使えるようにしましょう!
コメント