平成31年度 春期27テクノロジ系

基本情報 平成31年度 春期 問27:テクノロジ系に関する問題

“中間テスト”" 表からクラスごと, 教科ごとの平均点を求め. クラス名, 教科名の 昇順に表示する SQL 文中の a に入れる字句はどれか。

  • aGROUP BY クラス名, 教科名 ORDER BY クラス名, AVG(点数)
  • bGROUP BY クラス名, 教科名 ORDER BY クラス名, 教科名正答
  • cGROUP BY クラス名, 教科名, 学生番号 ORDER BY クラス名, 教科名, 平均点 GROUP BY クラス名, 平均点 ORDER BY クラス名, 教科名
  • dH さっ
正答:BGROUP BY クラス名, 教科名 ORDER BY クラス名, 教科名

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは b です。

SQLでクラスごと・教科ごとの平均点を出すには:

1. GROUP BY クラス名, 教科名 で「クラス+教科」のグループに分ける

2. ORDER BY クラス名, 教科名 で見た目を並べ替える

「グループ分けの基準」と「並べ替えの基準」は同じものを使うのが基本。

👉 覚え方:GROUP BY=まとめる、ORDER BY=並べる。

ほかの選択肢:a/c は不要な学生番号や平均点で並べたり、ORDER BYの項目が変/d は文字化けで判定不可。

標準試験対策の基準レベル

なぜこれが正解か

正解は b。「クラスごと・教科ごとの平均点」を求めるには `GROUP BY クラス名, 教科名` で2つのキーでグルーピングし、AVG(点数) で平均を計算する。表示順は「クラス名, 教科名の昇順」と指定されているため `ORDER BY クラス名, 教科名` が必要。

```sql

SELECT クラス名, 教科名, AVG(点数) AS 平均点

FROM 中間テスト

GROUP BY クラス名, 教科名

ORDER BY クラス名, 教科名;

```

各選択肢の解説

  • a:GROUP BYは正しいが、ORDER BYに `AVG(点数)` が入っていて並び順が問題要求(クラス名・教科名昇順)と一致しない。
  • c:GROUP BYに学生番号を含めると個人別の細分化グループになり、クラス・教科の集計にならない。
  • d:意味不明(OCR文字化け)で構文不正。

覚え方・ひっかけ注意

SQLの実行順序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。GROUP BYしたカラム以外をSELECTに書く場合は集約関数(AVG、SUM、COUNT等)で集約する必要がある(標準SQLの機能依存ルール)。これに違反するとMySQLでもONLY_FULL_GROUP_BYモードでエラー。

上級誤答論破・背景理論まで深掘り

理論的背景

SQLの集約クエリは関係代数の射影+集約操作に対応。GROUP BYは指定列の組合せで関係を分割し、各分割に対して集約関数を適用する。集約関数は COUNT, SUM, AVG, MIN, MAX の基本5つに加え、SQL:2003以降は WINDOW関数(OVER句) で集約と詳細行を同時に扱える。

HAVING句との関係

GROUP BY後の集約結果に対する条件付けは HAVING句を使う(WHEREは集約前のフィルタ)。

```sql

SELECT クラス名, 教科名, AVG(点数) AS 平均点

FROM 中間テスト

GROUP BY クラス名, 教科名

HAVING AVG(点数) >= 60 -- 平均60点以上のクラス×教科のみ

ORDER BY クラス名, 教科名;

```

実行順序の詳細

論理的処理順序:①FROM/JOIN ②WHERE ③GROUP BY ④HAVING ⑤WINDOW ⑥SELECT ⑦DISTINCT ⑧ORDER BY ⑨LIMIT/OFFSET。これによりGROUP BY後のSELECTで定義したエイリアス(`AVG(点数) AS 平均点`)はORDER BY句で参照可能だがHAVING句では使えない(ただしPostgreSQL等の拡張で許容される実装もある)。

実務での使われ方

  • BIレポート:日次/月次/顧客別/商品別の集計はGROUP BY軸を増減して切替
  • OLAPキューブ:ROLLUP、CUBE、GROUPING SETSで多次元小計
  • ウィンドウ関数:ROW_NUMBER, RANK, LAG, LEAD, SUM() OVER (PARTITION BY...) で詳細行を保ちつつ集約
  • マテリアライズドビュー:頻繁な集約クエリを事前計算してキャッシュ

試験での位置づけ

基本情報のデータベース分野で必出。応用情報・データベーススペシャリストではJOIN(INNER/LEFT/RIGHT/FULL OUTER/CROSS)、相関サブクエリ、CTE(WITH句)、再帰CTE、ウィンドウ関数まで踏み込む。

選択肢の発展補足

GROUP BYに含まれない列をSELECTに書くと関数従属性を満たさない限りエラー(標準SQL)。MySQLは緩い実装で許容してきたが、5.7以降ONLY_FULL_GROUP_BYがデフォルト。NULLは1つのグループに集約されるが、集約関数では`COUNT(*)`を除き無視されるなど挙動差に注意。

出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成31年度 春期27/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。