基本情報技術者 2011年 春期 午前(科目A) 問30
問題文
次の表は、営業担当者のある年度の販売実績である。この表の第1期から第4期の販売金額の平均が4,000万円以上で、どの期でも3,000万円以上販売している営業担当者の名前を求めるSQL文として、適切なものはどれか。ここで、金額の単位は千円とする。

選択肢
ア:SELECT 名前 FROM 販売実績
WHERE (第1期 + 第2期 + 第3期 + 第4期) / 4 >= 40000 OR
第1期 >= 30000 OR 第2期 >= 30000
第3期 >= 30000 OR 第4期 >= 30000
イ:SELECT 名前 FROM 販売実績
WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 40000 AND
第1期 >= 30000 AND 第2期 >= 30000 AND
第3期 >= 30000 AND 第4期 >= 30000
ウ:SELECT 名前 FROM 販売実績
WHERE 第1期> 40000 OR 第2期 > 40000 OR
第3期 > 40000 OR 第4期 > 40000 AND
第1期 >= 30000 OR 第2期 >= 30000 OR
第3期 >= 30000 OR 第4期 >= 30000
エ:SELECT 名前 FROM 販売実績
WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 160000 AND
第1期 >= 30000 AND 第2期 >= 30000 AND
第3期 >= 30000 AND 第4期 >= 30000(正解)
🔒 解説は解答すると表示されます
四期平均と最低売上条件のSQL【午前解説】
正解の理由
設問は「第1期〜第4期の販売金額の平均が 4,000 万円以上(= 40,000 千円以上)で、どの期でも 3,000 万円以上(= 30,000 千円以上)」という2条件を同時に満たす行を選ぶことを求めています。
平均条件は と表せますが、除算を避けるため同値変形して とするのが確実です。さらに「どの期でも 30,000 千円以上」は各期ごとの比較をすべて AND で結ぶ必要があります。エはこの両方を満たしているため正解です。
平均条件は と表せますが、除算を避けるため同値変形して とするのが確実です。さらに「どの期でも 30,000 千円以上」は各期ごとの比較をすべて AND で結ぶ必要があります。エはこの両方を満たしているため正解です。
解法ステップ
- 単位を確認:設問の金額単位は千円。4,000 万円=40,000 千円。
- 平均条件を同値変形:平均 は合計 に置き換え。
- 各期下限は 30,000 千円なので第1期〜第4期それぞれ
>= 30000を付け、全て AND で結合。 - SQL の WHERE 節で合計条件と各期条件をすべて AND 結合すれば正答となる。
選択肢別の誤答解説
- ア: WHERE (第1期 + 第2期 + 第3期 + 第4期) / 4 >= 40000 OR 第1期 >= 30000 OR ...
- 誤り:平均条件と各期条件を OR で結んでおり、どちらか一方を満たす行が抽出されてしまう。要件は両方満たすこと。
- イ: WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 40000 AND 第1期 >= 30000 ...
- 誤り:合計の閾値が になっており、平均 (合計 )の条件と一致しないため不十分。
- ウ: WHERE 第1期> 40000 OR 第2期 > 40000 OR 第3期 > 40000 AND 第1期 >= 30000 OR 第2期 >= 30000 OR 第3期 >= 30000 OR 第4期 >= 30000
- 誤り:論理演算子の組合せが混在しており括弧がなく優先順位で意図しない評価になる。さらに平均要件を満たす式になっていない。
- エ: WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 160000 AND 第1期 >= 30000 AND 第2期 >= 30000 AND 第3期 >= 30000 AND 第4期 >= 30000
- 正解:平均条件を合計 に変換し、各期の下限条件を全て AND で結んでいる。したがって要件を正確に満たす。
- 正解: エ
よくある誤解
- 平均条件を OR でつなぐ:平均と各期の下限は両方満たす必要があるため OR でつなぐと条件が甘くなり誤答になります。
- 単位の取り違え:設問の金額単位は千円なので「4,000 万円=40,000 千円」「4期合計=160,000 千円」を忘れると閾値を誤ります。
- 除算による切り捨て:整数型カラムで
(sum)/4 >= 40000とすると SQL 実装によっては整数除算で誤判定する場合があるため、合計比較か浮動小数点除算を明示するべきです。
補足コラム
- 実装上の注意点:SQL の型が整数型の場合
(第1期+...)/4は整数除算になり得るため、浮動小数点に変換するか合計比較にすることを推奨します。例:(第1期+...)/4.0 >= 40000または第1期+... >= 160000。 - NULL の取り扱い:いずれかの期が NULL の場合は比較が未知値になり抽出されません。NULLを 0 と見なすなら
COALESCE(第1期,0)等を使って明示的に処理します。 - カラム名に数字や全角を含む場合、SQL 方言によっては引用符で囲む必要があります(例:
"第1期"や\第1期``)。実際の環境に合わせてエスケープしてください。
FAQ
Q. なぜ合計で比較するほうが安全ですか?
A. 除算による丸めや整数除算の挙動に依存せず、必要な比較を整数で表現できるためです(例:合計 )。
A. 除算による丸めや整数除算の挙動に依存せず、必要な比較を整数で表現できるためです(例:合計 )。
Q. OR と AND を混ぜるとどうなる?
A. 括弧がない場合、SQL の演算子優先順位や左結合の規則で意図しない評価になり、論理条件が壊れます。複雑な条件は必ず括弧で明示してください。
A. 括弧がない場合、SQL の演算子優先順位や左結合の規則で意図しない評価になり、論理条件が壊れます。複雑な条件は必ず括弧で明示してください。
Q. 単位を間違えたら?
A. 閾値が大きく変わるため致命的です。問題文の単位(千円)がある場合、必ず千円単位で閾値計算を行ってください。
A. 閾値が大きく変わるため致命的です。問題文の単位(千円)がある場合、必ず千円単位で閾値計算を行ってください。
関連キーワード: SQL、SELECT、WHERE、平均、合計、AND、OR、NULL、単位変換、演算子優先順位、COALESCE

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

