今回の課題・得点と最高完了得点をこのブラウザに保存します。SQL入力・実行結果・教材DBへの変更は再読み込みで戻ります。誤答やヒントによる減点はありません。

最高完了得点: 0 / 50pt

GROUP BY / HAVING — グループ集計

初級約8分3問

GROUP BY でグループ別に集計する方法と、HAVING でグループに条件を付ける方法を練習します。

GROUP BY とは

GROUP BY は、同じ値を持つ行をグループにまとめて集計するときに使います。

SELECT category, COUNT(*) FROM products GROUP BY category;

これで「カテゴリごとの商品数」が取得できます。

GROUP BY + 集計関数

-- カテゴリごとの平均価格
SELECT category, AVG(price) AS avg_price
FROM products
GROUP BY category;

-- カテゴリごとの合計在庫
SELECT category, SUM(stock) AS total_stock
FROM products
GROUP BY category;

HAVING — グループへの条件

WHERE が行への条件なのに対し、HAVING はグループへの条件です。

-- 商品数が2件以上のカテゴリだけ表示
SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category
HAVING cnt >= 2;

WHERE と HAVING の違い

WHEREHAVING
対象個々の行グループ
実行タイミングGROUP BY の前GROUP BY の後
集計関数使えない使える
教材DBを初期化中...
SQL エディタCtrl / ⌘ + Enter で実行 · Esc → Tab で移動

結果は1000行まで・実行は30秒まで。中止・リセットは教材への変更だけを破棄し、入力SQLと進捗は残します。

教材DBを初期化しています。

SQL を入力して実行してください
練習問題 — 0/3 完了 (0/50pt)
▶
productsテーブルを category でグループ化して、カテゴリごとの商品数を取得してください。
列の順序: category → 別名自由。行の順序は自由です。
15pt
○
productsテーブルを category でグループ化して、カテゴリごとの平均価格を取得してください。
15pt
○
customersテーブルを city でグループ化して、2人以上いる都市と人数だけを取得してください。
20pt