SQL 練習問題 44 問
SQL道場に入っている練習問題を 1 ページに並べました (初級16問・中級13問・上級15問)。 気になる問題をクリックすると、そのレッスンの解説と ブラウザ内で動く SQLite のエディタに移動します。 解説を読まずに問題だけ解いても構いません。
全 44 問
- 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 — 長いクエリを名前で分解する35pt
- WITH でカテゴリごとの平均価格を求める CTE を作り、それを使って「自分のカテゴリの平均価格より高い商品」の name・category・price を取得してください。上級上級SQL / WITH — 長いクエリを名前で分解する35pt
- CTE を 2 つつなげて、商品ごとの販売数量の合計を求め、name と qty を qty の多い順 (同数なら name 順) で取得してください。上級上級SQL / WITH — 長いクエリを名前で分解する30pt
- orders を年月ごとにまとめ、ym (YYYY-MM 形式) と注文件数 cnt を、ym の昇順で取得してください。上級上級SQL / 日付の集計と EXISTS30pt
- orders と products を結合して、年月ごとの売上金額 (price × quantity の合計) を ym と sales の 2 列で、ym の昇順で取得してください。上級上級SQL / 日付の集計と EXISTS35pt
- 東京に住む顧客が一度でも注文した商品の name を、EXISTS を使って name 順に取得してください。上級上級SQL / 日付の集計と EXISTS35pt