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

ITサービスマネージャ 2018年 午前2 問21


問題文

“社員”表から、役割名がプログラマである社員が3人以上所属している部門の部門名を取得するSQL文はどれか。ここで、実線の下線は主キーを表す。 社員(社員番号、部門名、社員名、役割名)

選択肢

ア:SELECT 部門名 FROM 社員 GROUP BY 部門名 HAVING COUNT(*) >= 3 WHERE 役割名 = 'プログラマ'
イ:SELECT 部門名 FROM 社員 WHERE COUNT(*) >= 3 GROUP BY 部門名 HAVING 役割名 = 'プログラマ'
ウ:SELECT 部門名 FROM 社員 WHERE COUNT(*) >= 3 AND 役割名 = 'プログラマ' GROUP BY 部門名
エ:SELECT 部門名 FROM 社員 WHERE 役割名 = 'プログラマ' GROUP BY 部門名 HAVING COUNT(*) >= 3(正解)

🔒 解説は解答すると表示されます

WHERE句とHAVING句の使い分け【午前2解説】

正解の理由

正しいのはエです。
求めるのは、役割名が「プログラマ」である社員が3人以上所属する部門です。まずWHERE句でプログラマの社員に絞り込み、次にGROUP BY句で部門ごとにまとめ、最後にHAVING句で各部門の人数が3人以上かを判定します。
処理の順序は次のとおりです。
  1. WHERE句で「プログラマ」の社員を抽出する
  2. GROUP BY句で部門ごとにグループ化する
  3. HAVING句でグループ内の人数が3人以上の部門に絞る

解法ステップ

  1. 集計前の条件か、集計後の条件かを判断します。
    「役割名がプログラマ」は、社員ごとに確認できる条件です。集計前にWHERE句で指定します。
  2. 人数を数える単位を決めます。
    部門ごとの人数を調べるため、GROUP BY句に部門名を指定します。
  3. 集計結果に対する条件を指定します。
    「3人以上」はグループ化して人数を数えた後の条件なので、HAVING句でCOUNT(*) >= 3と指定します。

選択肢別の誤答解説

  • ア:WHERE句の位置が誤っています。WHERE句はGROUP BY句やHAVING句より前に記述します。また、役割名で絞り込んでいないため、COUNT(*)はプログラマ以外も含む社員数を数えてしまいます。
  • イ:WHERE句では、COUNT(*)のような集計関数を条件にできません。また、役割名はグループ化後に判定する条件ではなく、集計前に絞り込む条件です。
  • ウ:WHERE句でCOUNT(*)を条件にしている点が誤りです。集計結果に対する条件はHAVING句に指定します。
  • エ:WHERE句でプログラマを抽出し、部門ごとにグループ化した後、HAVING句で人数が3人以上の部門を選んでいます。設問の条件に合致します。

よくある誤解

  • WHERE句とHAVING句は、どちらも条件を指定するため同じだと思う
    WHERE句は集計前の行を絞り込み、HAVING句は集計後のグループを絞り込みます。
  • 人数の条件もWHERE句に書けると思う
    COUNT(*)などの集計結果を条件にする場合は、HAVING句を使います。
  • GROUP BY句とHAVING句の順序を混同する
    基本的な記述順序は、WHERE句、GROUP BY句、HAVING句です。

補足コラム

この問題では、WHERE句でプログラマだけを残してから部門ごとに集計するため、COUNT(*)は各部門のプログラマの人数を表します。
社員番号が主キーであることから、社員表の1行は1人の社員を表しています。そのため、COUNT(*)で条件に該当する社員数を数えられます。

FAQ

Q. COUNT(*)とCOUNT(社員番号)は、ここでは同じですか?
A. 社員番号が主キーでNULLにならず、1行が1人の社員を表すため、この表では同じ人数を数えます。
Q. HAVING句だけで役割名を指定してはいけませんか?
A. この問題では、役割名は集計前に絞り込む条件です。WHERE句でプログラマだけに絞ってから人数を数えるのが適切です。
Q. HAVING句はGROUP BY句がないと使えませんか?
A. SQLでは、GROUP BY句を使わずに集計結果に対する条件をHAVING句で指定することもあります。ただし、この問題のように部門ごとに判定する場合は、GROUP BY句が必要です。

関連キーワード: WHERE句、HAVING句、GROUP BY句、COUNT関数、集約】【。
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITサービスマネージャを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

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

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