データベース

基本情報技術者試験SQL集約関数」の問題

テクノロジ系データベース計算問題難易度:normal
次の「受注」表に対し SQL文 `SELECT COUNT(*), SUM(金額) FROM 受注 WHERE 金額 >= 3000` を実行した。得られる結果の組はどれか。 | 受注ID | 金額 | |---|---| | 1 | 2000 | | 2 | 3000 | | 3 | 5000 | | 4 | 3000 | | 5 | 1000 | | 6 | 4000 |
COUNT=5、SUM=17000
COUNT=4、SUM=15000(該当4行の合計)
COUNT=6、SUM=18000
COUNT=3、SUM=12000
正解
COUNT=4、SUM=15000(該当4行の合計)

WHERE 金額>=3000 で残る行は受注ID 2(3000)・3(5000)・4(3000)・6(4000)の4行であり、COUNT(*)=4、SUM(金額)=3000+5000+3000+4000=15000となるため正しい。

?選択肢ごとの解説

ア ×COUNT=5、SUM=17000 は条件を金額>=2000と誤読し、2000の行まで含めて集計した誤りである。正しくは金額>=3000の4行のみが対象。
イ ○WHERE 金額>=3000 で残る行は受注ID 2(3000)・3(5000)・4(3000)・6(4000)の4行であり、COUNT(*)=4、SUM(金額)=3000+5000+3000+4000=15000となるため正しい。
ウ ×COUNT=6、SUM=18000はWHERE句を無視して全6行を集計した誤りで、3000未満の行も数えてしまっている。
エ ×COUNT=3、SUM=12000は『>=』を『>』と取り違え3000ちょうどの2行を除外した誤りである。

くわしく

COUNT(*)は条件を満たす行数、SUM()はその列値の合計を返す。WHERE は集約より先に行を絞り込むため、まず条件で行を選別してから件数と合計を計算する順序を理解することが要点である。比較演算子>=は境界値を含む点に注意する。

本番での押さえどころ

試験のコツ

集約関数の問題はまず WHERE で残る行に印を付け、その行だけで COUNT と SUM を別々に数える。境界値が含まれるか比較演算子を最初に確認する。

覚え方

『絞ってから数える』。WHERE が先、COUNT/SUM が後、という順序を矢印で覚える。

よくある誤り

WHERE 句の比較で『以上(>=)』と『より大(>)』を取り違え、境界値3000の行を含めるか否かを誤る。またWHERE を適用し忘れ全行を集計する誤りも多い。

データベースの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0241

【基本情報技術者試験】SQL集約関数の問題 — 解答・解説|ukamiru 過去問