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

データベーススペシャリスト 2017年 午前208


問題文

“社員”表から、部署コードごとの主任の人数と一般社員の人数を求めるSQL文とするために、aに入る字句はどれか。ここで、実線の下線は主キーを表す。   社員(社員コード、部署コード、社員名、役職)   〔SQL文〕
    SELECT 部署コード、
        COUNT(CASE WHEN 役職 = '主任' <b>(a)</b> END) AS 主任の人数、
        COUNT(CASE WHEN 役職 = '一般社員' <b>(a)</b> END) AS 一般社員の人数
    FROM 社員 GROUP BY 部署コード
データベーススペシャリスト 2017年 午前2 問08の問題画像

選択肢

THEN 1 ELSE -1
THEN 1 ELSE 0
THEN 1 ELSE NULL(正解)
THEN NULL ELSE 1

社員表の部署コードごとの役職人数集計SQL【午前2 解説】

正解の理由

SQLのCOUNT関数はNULL値をカウントしません。
そのため、CASE WHEN 役職 = '主任' THEN 1 ELSE NULL ENDとすることで、「主任」の行は1となりカウントされ、「主任」でない行はNULLとなりカウントされません。
これにより、部署ごとの主任人数を正確に集計できます。
同様に一般社員の人数も同じロジックで求められます。

解法ステップ

  1. 集計したい条件(役職が「主任」か「一般社員」か)をCASE WHENで指定する。
  2. 条件に合致する場合は1を返し、合致しない場合はNULLを返す。
  3. COUNT関数でNULL以外の値をカウントし、条件に合致する行数を求める。
  4. 部署コードごとにGROUP BYで集計する。

選択肢別の誤答解説

  • ア: THEN 1 ELSE -1
    • ELSEが-1なので、全行がカウントされてしまい正確な人数が得られません。
  • イ: THEN 1 ELSE 0
    • ELSEが0のため、0もカウントされてしまい誤った集計結果になります。
  • ウ: THEN 1 ELSE NULL
    • 条件に合致しない場合はNULLとなり、COUNTでカウントされず正確な人数が得られます。
  • エ: THEN NULL ELSE 1
    • 条件に合致しない場合に1を返すため、逆にカウントされてしまい誤集計となります。

よくある誤解

COUNTは0や-1もカウント対象になるため、ELSE 0ELSE -1を使うと全行がカウントされてしまいます。
ELSE NULLを使うことが正しい集計のポイントです。

補足コラム

SQLのCOUNT関数は「NULL以外の値の個数」を数えるため、条件付き集計ではCASE WHENで条件に合致しない場合にNULLを返すのが定石です。
また、SUM関数を使いCASE WHEN 役職 = '主任' THEN 1 ELSE 0 ENDとする方法もありますが、COUNTを使う場合はNULLを返すのがポイントです。

FAQ

Q: なぜELSE 0ではダメなのですか?
A: COUNTは0もカウント対象なので、条件に合致しない行もカウントされてしまい正確な人数が得られません。
Q: SUM関数を使う場合はどう書けばよいですか?
A: SUM(CASE WHEN 役職 = '主任' THEN 1 ELSE 0 END)とし、条件に合致する行だけ1を足し合わせます。

関連キーワード: SQL, COUNT関数、CASE文、集計関数、NULLの扱い、グループ集計、部署別人数集計
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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