EXISTS・HAVING・外部結合・ウィンドウ関数の実戦パターン
業務要件を SQL で表現する能力が問われる。JOIN・サブクエリ・集計・ウィンドウ関数の組み合わせが頻出。SQL の穴埋めと記述の両方がある。
-- 「受注がある顧客の一覧」 SELECT 顧客ID, 顧客名 FROM 顧客 c WHERE EXISTS ( SELECT 1 FROM 受注 o WHERE o.顧客ID = c.顧客ID );
-- 「3件以上受注した顧客」 SELECT 顧客ID, COUNT(*) AS 受注件数 FROM 受注 GROUP BY 顧客ID HAVING COUNT(*) >= 3;
-- 「受注がない顧客を探す」 SELECT c.顧客ID, c.顧客名 FROM 顧客 c LEFT JOIN 受注 o ON c.顧客ID = o.顧客ID WHERE o.受注ID IS NULL;
-- 「各部門で給与が最高の社員」 SELECT * FROM ( SELECT 氏名, 部門ID, 給与, RANK() OVER (PARTITION BY 部門ID ORDER BY 給与 DESC) AS rk FROM 社員 ) t WHERE rk = 1;
-- 「部門別売上上位3商品」 WITH 部門売上 AS ( SELECT 部門ID, 商品ID, SUM(売上) AS 合計売上, ROW_NUMBER() OVER (PARTITION BY 部門ID ORDER BY SUM(売上) DESC) rn FROM 売上明細 GROUP BY 部門ID, 商品ID ) SELECT * FROM 部門売上 WHERE rn <= 3;
読了ボタンを押すとトップページの進捗に反映されます