戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2021年 秋期 午前229


問題文

“部門別売上”表から、部門コードごと、期ごとの売上を得る SQL文はどれか。
応用情報技術者 2021年 秋期 午前2 問29の問題画像

選択肢

SELECT 部門コード、 '第1期' AS期、 第1期売上 AS 売上
 FROM 部門別売上
 INTERSECT
 (SELECT 部門コード、 '第2期' AS 期、 第2期売上 AS 売上
  FROM 部門別売上)
 ORDER BY 部門コード、 期
SELECT 部門コード、 '第1期' AS期、 第1期売上 AS 売上
 FROM 部門別売上
 UNION
 (SELECT 部門コード、 ' 第2期' AS期、第2期売上 AS 売上
  FROM 部門別売上)
 ORDER BY 部門コード、 期
(正解)
SELECT A.部門コード、 '第1期AS期、 A.第1期売上 AS 売上
 FROM 部門別売上 A
 CROSS JOIN
 (SELECT B.部門コード、 '第2期 AS 期、 B.第2期売上 AS 売上
  FROM 部門別売上 B) T
 ORDER BY 部門コード、 期
SELECT A.部門コード、 '第1期’AS期、 A. 第1期売上 AS 売上
 FROM 部門別売上 A
 INNER JOIN
 (SELECT B.部門コード、 '第2期'AS期、 B. 第2期売上 AS 売上
  FROM 部門別売上 B) T ON A.部門コード = T.部門コード
 ORDER BY 部門コード、 期

部門別売上表から期ごとの売上を得るSQL文【午前2 解説】

要点まとめ

  • 結論:部門コードごとに第1期と第2期の売上を縦に並べるにはUNIONを使うのが正解です。
  • 根拠:UNIONは複数のSELECT結果を縦方向に結合し、重複を排除しつつ統合できるため、期ごとの売上を1列にまとめられます。
  • 差がつくポイント:INTERSECTやJOINは縦方向の結合には不向きで、特にINTERSECTは共通部分のみ抽出し結果が減るため誤りです。

正解の理由

選択肢イは、第1期売上と第2期売上をそれぞれSELECTし、UNIONで縦に結合しています。これにより「部門コード」「期」「売上」の3列構成で、期ごとの売上データが1行ずつ得られます。ORDER BYで部門コードと期の順に並べ替えも適切です。

よくある誤解

INTERSECTは複数のSELECTの共通部分を抽出するため、売上データを縦に並べる用途には使えません。JOINは横方向の結合であり、縦にデータを展開するには不適切です。

解法ステップ

  1. 第1期売上を「期」列に'第1期'としてSELECTする。
  2. 第2期売上を「期」列に'第2期'としてSELECTする。
  3. 2つのSELECT結果をUNIONで縦に結合する。
  4. 結果を部門コードと期でORDER BYして並べ替える。

選択肢別の誤答解説

  • ア: INTERSECTは共通部分のみ抽出し、両期の売上が同じ部門コードで一致する行だけになるため不適切。
  • イ: 正解。UNIONで縦に結合し、期ごとの売上を正しく取得できる。
  • ウ: CROSS JOINは全組み合わせを作るため、売上が不正確に増える。
  • エ: INNER JOINは横方向の結合で、期ごとの売上を縦に展開できず、結果が重複し誤り。

補足コラム

SQLで複数列を縦に展開する操作は「アンピボット(unpivot)」と呼ばれます。標準SQLではUNIONを使う方法が一般的ですが、DBMSによってはUNPIVOT句が用意されている場合もあります。売上のような複数期のデータを分析する際に重要なテクニックです。

FAQ

Q: UNIONとUNION ALLの違いは何ですか?
A: UNIONは重複行を排除しますが、UNION ALLは重複も含めてすべて結合します。今回の問題では重複排除が必要なためUNIONが適切です。
Q: INTERSECTはどんな時に使いますか?
A: INTERSECTは複数のSELECT結果の共通部分を抽出したい場合に使います。今回のような縦展開には不向きです。

関連キーワード: SQL, UNION, INTERSECT, JOIN, アンピボット、売上集計、データ変換
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について