SQL 中級: JOIN とウィンドウ関数で顧客ランキングと累計売上を出す

受注管理の 4 テーブル(顧客・製品・注文・明細)を JOIN して注文合計のビューを作り、rank() や sum() OVER のウィンドウ関数で顧客ランキングと月次累計を求めます。LEFT JOIN で「注文の無い顧客」を洗い出す実務定番の分析も扱います。

中級約 60 分Azure 実環境

ラボ概要

このラボでは、営業企画から「顧客別の売上ランキング」「月次売上の累計推移」「一度も注文していない顧客の一覧」を頼まれたデータ担当の想定で、複数テーブルの結合とウィンドウ関数を実機で身につけます。

ブラウザで開く IDE の中に PostgreSQL が同居しており、受注管理システムから抜き出した 4 テーブル(顧客 10 社・製品 6 種・注文 40 件・明細 78 行)が最初から入っています。書いた SQL はその場で実行でき、判定ボタンで結果の行数や合計が正しいかを確認できます。

学習目標:

  • 3 つ以上のテーブルを JOIN して、明細を注文単位に集計する
  • 集計結果を CREATE VIEW で再利用できる形にする
  • rank() OVER (ORDER BY ...) で順位を付ける
  • sum() OVER (ORDER BY ...) で累計(ランニング トータル)を求める
  • LEFT JOIN と IS NULL で「対応する行が無いもの」を見つける
前提知識:
  • GROUP BY と集計関数(sum / count)の基本(「SQL 入門」ラボ相当)
完了条件:
  • ビュー v_order_totals(40 行、合計 6,455,000)と v_monthly_running(最終月の累計 6,455,000)が作成されていること
  • top_customers.sql がウィンドウ関数でランキングし、1 位が 山田商事 になること
  • no_orders.sql が LEFT JOIN で注文の無い 2 社を返すこと

ラボの構成

  1. 1ブラウザ IDE を開いてテーブルを確認する
  2. 23 テーブルを JOIN して注文ごとの合計を出す
  3. 3注文合計をビューにする
  4. 4ウィンドウ関数で顧客ランキングを作る
  5. 5月次売上と累計をウィンドウ関数で出す
  6. 6LEFT JOIN で注文の無い顧客を見つける
  7. 7判定を実行する
  8. 8発展(任意)と考察

詳細な手順は、ラボ開始後に画面内のガイドとして表示されます。

手順のプレビュー(最初のステップ)

1. ブラウザ IDE を開いてテーブルを確認する

  • ラボ画面の ブラウザ IDE を開く をクリックし、表示されているパスワードでサインインする
  • README.md を開いて課題の全体像を読み、Terminal → New Terminal でターミナルを開く
  • PostgreSQL に接続し、4 つのテーブルの構造と件数を確認する
psql "$DATABASE_URL"
\dt
\d orders
\d order_items
SELECT count(*) FROM customers;    -- 10
SELECT count(*) FROM orders;       -- 40
SELECT count(*) FROM order_items;  -- 78

> 注: orders.customer_id → customers.id、order_items.order_id → orders.id、order_items.product_id → products.id が結合キーです。金額は明細に無く、qty * unit_price で計算します。

残り 7 セクションの手順は、ラボを開始すると画面内に表示されます

構成図

構成図

参考リソース

このラボが対応する試験の模擬問題集

本番形式の問題で理解度を確認できます。各試験とも先頭 15 問は無料です。

DP-900Azure Data Fundamentals練習テスト 2 回・全 160 問DP-300Azure Database Administrator練習テスト 2 回・全 160 問