SQL 練習問題 62 問
SQL道場に入っている練習問題を 1 ページに並べました (初級16問・中級22問・上級24問)。 気になる問題をクリックすると、そのレッスンの解説と ブラウザ内で動く SQLite のエディタに移動します。 解説を読まずに問題だけ解いても構いません。
全 62 問
- productsテーブルの全データを取得してください。初級SQL入門 / SELECT — データを取得する10pt
- productsテーブルから name と price の列だけ取得してください。初級SQL入門 / SELECT — データを取得する15pt
- customersテーブルの全データを取得してください。初級SQL入門 / SELECT — データを取得する10pt
- productsテーブルからカテゴリが「電子機器」の商品を全て取得してください。初級SQL入門 / WHERE — 条件でデータを絞る10pt
- productsテーブルから価格が10000円以上の商品の name と price を取得してください。初級SQL入門 / WHERE — 条件でデータを絞る15pt
- customersテーブルから東京在住の顧客を全て取得してください。初級SQL入門 / WHERE — 条件でデータを絞る10pt
- productsテーブルから価格が1000円以上10000円以下の商品を取得してください。初級SQL入門 / WHERE — 条件でデータを絞る15pt
- productsテーブルの全商品を価格の安い順(昇順)で取得してください。初級SQL入門 / ORDER BY / LIMIT — 並び替えと件数制限10pt
- productsテーブルから価格の高い順に上位3件の name と price を取得してください。初級SQL入門 / ORDER BY / LIMIT — 並び替えと件数制限15pt
- customersテーブルの顧客を年齢の若い順(昇順)で全員取得してください。初級SQL入門 / ORDER BY / LIMIT — 並び替えと件数制限10pt
- productsテーブルの商品数(全行数)を取得してください。初級SQL入門 / 集計関数 — COUNT・SUM・AVG・MAX・MIN10pt
- productsテーブルの全商品の合計在庫数(stockの合計)を取得してください。初級SQL入門 / 集計関数 — COUNT・SUM・AVG・MAX・MIN15pt
- productsテーブルで最も高い価格(MAX)と最も安い価格(MIN)を同時に取得してください。初級SQL入門 / 集計関数 — COUNT・SUM・AVG・MAX・MIN15pt
- productsテーブルを category でグループ化して、カテゴリごとの商品数を取得してください。初級SQL入門 / GROUP BY / HAVING — グループ集計15pt
- productsテーブルを category でグループ化して、カテゴリごとの平均価格を取得してください。初級SQL入門 / GROUP BY / HAVING — グループ集計15pt
- customersテーブルを city でグループ化して、2人以上いる都市と人数だけを取得してください。初級SQL入門 / GROUP BY / HAVING — グループ集計20pt
- orders と customers を JOIN して、注文 id (o.id) と注文した顧客の名前 (c.name) を取得してください。中級中級SQL / JOIN — テーブルの結合20pt
- orders・customers・products の 3 テーブルを JOIN して、顧客名・商品名・数量 (quantity) を取得してください。中級中級SQL / JOIN — テーブルの結合20pt
- 「田中太郎」が注文した商品の名前を取得してください(JOIN + WHERE)。中級中級SQL / JOIN — テーブルの結合25pt
- customers を LEFT JOIN orders で結合し、顧客ごとの注文件数 (COUNT) を「顧客名・件数」で取得してください。中級中級SQL / LEFT JOIN と集計 — 結合してから数える25pt
- orders と products を JOIN して、商品ごとの注文合計数量 (SUM(quantity)) を「商品名・合計」で取得してください。中級中級SQL / LEFT JOIN と集計 — 結合してから数える25pt
- products の平均価格より高い商品の name と price を取得してください(サブクエリを使う)。中級中級SQL / サブクエリ — クエリの中のクエリ25pt
- 「田中太郎」(id = 1) が注文した商品の name を、サブクエリ (IN) を使って取得してください。中級中級SQL / サブクエリ — クエリの中のクエリ25pt
- customers の平均年齢より若い顧客の name と age を取得してください(サブクエリを使う)。中級中級SQL / サブクエリ — クエリの中のクエリ20pt
- 相関サブクエリを使って、各カテゴリで最も価格の高い商品の name・category・price を取得してください。中級中級SQL / サブクエリ応用 — 相関サブクエリと FROM 句30pt
- FROM 句のサブクエリを使って、カテゴリごとの平均価格が 30000 より大きいカテゴリと、その平均価格を取得してください。中級中級SQL / サブクエリ応用 — 相関サブクエリと FROM 句30pt
- orders と products を JOIN して、カテゴリ別の売上 (SUM(price × quantity)) を「カテゴリ・売上」で取得してください。中級中級SQL / 総合 — JOIN × GROUP BY で売上を出す30pt
- orders と customers を JOIN して、2 回以上注文した顧客の名前と注文回数を取得してください(HAVING を使う)。中級中級SQL / 総合 — JOIN × GROUP BY で売上を出す30pt
- 3 テーブルを JOIN して、顧客ごとの購入総額 (SUM(price × quantity)) を「顧客名・総額」で取得してください。中級中級SQL / 総合 — JOIN × GROUP BY で売上を出す30pt
- products の name と price に加えて、price が 30000 以上なら '高価格'、5000 以上なら '中価格'、それ以外は '低価格' となる price_band 列を CASE で作り、price の高い順に並べてください。上級上級SQL / CASE — 条件で値を切り替える25pt
- カテゴリごとに、商品の総数 total と、price が 30000 以上の商品数 high_count を、条件付き集計 (SUM + CASE) で同時に取得してください。上級上級SQL / CASE — 条件で値を切り替える30pt
- products の name と stock に加えて、stock が 20 未満なら '要補充'、100 未満なら '通常'、それ以外は '潤沢' となる stock_level 列を作り、stock の少ない順に並べてください。上級上級SQL / CASE — 条件で値を切り替える25pt
- products の name と price に、price の高い順の順位 rnk を RANK() で付けてください。上級上級SQL / ウィンドウ関数 — 順位を付ける25pt
- products の category・name・price に、カテゴリごとに price の高い順の順位 rn を ROW_NUMBER() で付けてください (PARTITION BY を使う)。上級上級SQL / ウィンドウ関数 — 順位を付ける30pt
- 各カテゴリで最も価格が高い商品だけを、category・name・price の 3 列で取得してください (ウィンドウ関数をサブクエリに包んで絞る)。上級上級SQL / ウィンドウ関数 — 順位を付ける30pt
- orders の id・order_date・quantity に、order_date と id の順で並べた quantity の累計 running_total を SUM() OVER で付けてください。上級上級SQL / ウィンドウ関数 — 累計と前後の行30pt
- products の name と price に、price の高い順で 1 つ前の行の価格 prev_price を LAG() で付けてください。上級上級SQL / ウィンドウ関数 — 累計と前後の行30pt
- products の name・category・price に、同じカテゴリの平均価格との差 diff (price から平均を引いた値) を付けてください。上級上級SQL / ウィンドウ関数 — 累計と前後の行30pt
- WITH を使って、まず注文ごとの金額 (price × quantity) を求める CTE を作り、それを顧客ごとに合計した name と total を、total の多い順に取得してください。上級上級SQL / WITH 句 (CTE) — 長いクエリを名前で分解する35pt
- WITH でカテゴリごとの平均価格を求める CTE を作り、それを使って「自分のカテゴリの平均価格より高い商品」の name・category・price を取得してください。上級上級SQL / WITH 句 (CTE) — 長いクエリを名前で分解する35pt
- CTE を 2 つつなげて、商品ごとの販売数量の合計を求め、name と qty を qty の多い順 (同数なら name 順) で取得してください。上級上級SQL / WITH 句 (CTE) — 長いクエリを名前で分解する30pt
- orders を年月ごとにまとめ、ym (YYYY-MM 形式) と注文件数 cnt を、ym の昇順で取得してください。上級上級SQL / 日付の集計と EXISTS30pt
- orders と products を結合して、年月ごとの売上金額 (price × quantity の合計) を ym と sales の 2 列で、ym の昇順で取得してください。上級上級SQL / 日付の集計と EXISTS35pt
- 東京に住む顧客が一度でも注文した商品の name を、EXISTS を使って name 順に取得してください。上級上級SQL / 日付の集計と EXISTS35pt
- daily_sales から月ごとの売上合計を出してください。列は month (2026-01 の形) と sales の 2 つ、月の昇順で並べます。中級実務データ分析SQL / 月次集計 — 日付を年月にまとめる25pt
- 月ごと・店舗ごとの売上合計を出してください。列は month・store・sales の 3 つ、month → store の順で並べます。中級実務データ分析SQL / 月次集計 — 日付を年月にまとめる25pt
- 月ごとに、売上合計 sales・明細の件数 lines・売上のあった日数 days を出してください。列は month・sales・lines・days、月の昇順です。中級実務データ分析SQL / 月次集計 — 日付を年月にまとめる30pt
- 曜日番号ごとの売上合計を出してください。列は w (0〜6 の文字列) と sales、w の昇順で並べます。中級実務データ分析SQL / 曜日別集計 — 合計ではなく平均で比べる25pt
- 曜日を日本語 1 文字 (日・月・火・水・木・金・土) にして売上合計を出してください。列は weekday と sales、売上の多い順に並べます。中級実務データ分析SQL / 曜日別集計 — 合計ではなく平均で比べる30pt
- 週末 (日・土) と平日に分けて、1 日あたりの売上 per_day を出してください。列は kind と per_day、per_day の多い順です。per_day は ROUND で整数に丸めます。中級実務データ分析SQL / 曜日別集計 — 合計ではなく平均で比べる30pt
- daily_sales と products を結合し、カテゴリ別の売上合計を出してください。列は category と sales、売上の多い順です。中級実務データ分析SQL / 構成比 — 全体の何%かを出す25pt
- カテゴリ別の売上に、全体に占める割合 pct (小数第 1 位まで) を足してください。列は category・sales・pct、売上の多い順です。中級実務データ分析SQL / 構成比 — 全体の何%かを出す30pt
- 店舗ごとに、その店の中でのカテゴリ構成比を出してください。列は store・category・sales・pct、pct は百分率を小数第1位まで丸め、store 昇順 → sales 降順で並べます。中級実務データ分析SQL / 構成比 — 全体の何%かを出す35pt
- 日別の売上合計を出してください。列は sale_date と sales、日付の昇順で並べます。上級実務データ分析SQL / 移動平均 — 日々のブレをならす20pt
- 日別売上に 7 日移動平均 ma7 を足してください。列は sale_date・sales・ma7、日付の昇順です。ma7 は ROUND で小数第 1 位まで丸めます。上級実務データ分析SQL / 移動平均 — 日々のブレをならす35pt
- 日別売上に累計 cum を足してください。列は sale_date・sales・cum、日付の昇順です。最終日の累計が期間全体の合計と一致します。上級実務データ分析SQL / 移動平均 — 日々のブレをならす30pt
- 月次売上に前月の値 prev と前月比 mom (%、小数第 1 位) を足してください。列は month・sales・prev・mom、月の昇順です。上級実務データ分析SQL / 前月比と店舗比較 — 縦の並びを横に変える30pt
- 月ごとに 1 行で、東京本店の売上 tokyo・大阪支店の売上 osaka・その差 diff (東京 − 大阪) を出してください。列は month・tokyo・osaka・diff、月の昇順です。上級実務データ分析SQL / 前月比と店舗比較 — 縦の並びを横に変える30pt
- 店舗ごとの月次売上に、その店舗の中での前月比 mom を足してください。mom は百分率を小数第1位まで丸めます。列は month・store・sales・mom、store 昇順 → month 昇順で並べます。上級実務データ分析SQL / 前月比と店舗比較 — 縦の並びを横に変える40pt
- daily_salesを月・店舗・商品ごとの売上合計にし、各月・各店舗の上位3商品をROW_NUMBERで抽出してください。同額はproduct_id昇順。列はmonth・store・product_id・sales・rn、month昇順→store昇順→rn昇順の18行です。上級実務データ分析SQL / SQL店舗別ランキング:上位抽出と同率順位35pt
- 2026-03-15の店舗・商品ごとの売上合計に、店舗内の売上降順のRANKとDENSE_RANKを付けて比較してください。同率判定は売上のみ。列はstore・product_id・sales・rnk・dense、store昇順→sales降順→product_id昇順の6行です。上級実務データ分析SQL / SQL店舗別ランキング:上位抽出と同率順位30pt
- 2026-03-15の店舗・商品ごとの売上から、店舗別に売上金額の上位2段階を同率込みで抽出してください。列はstore・product_id・sales・dense、store昇順→dense昇順→product_id昇順の5行です。上級実務データ分析SQL / SQL店舗別ランキング:上位抽出と同率順位35pt