2016年11月25日金曜日

[平成28年度春] 午後 問3 解説

[問題文・解答]


平成28年度4月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問2〜問7のうち4問を選択する必要があります。
出題分野はデータベースで、問題の題材は遊園地の入園情報を管理する関係データベースです。
遊園地の入園情報・アトラクション利用情報を把握するためのデータベース表の拡張やSQL文について問われます。SQLの基礎知識が無いと解答は厳しい問題です。


[設問1]


a) 入園者表には元々入園時刻の項目があるため、退園時刻を追加すると退園時刻と入園時刻の差を取ることで入園者の滞在時間が計算できるようになります。よって、「オ」が正解です。

b) 利用表には利用時刻とアトラクション番号の項目があるため、この表より各入園者がいつどのアトラクションを利用したかが分かります。従って、「エ」の入園者のアトラクション利用状況が正解です。「ア」のアトラクションの待ち時間は、入園者がアトラクションに並び始めた時刻の情報があれば分かりますが、利用表にはそのような項目が無いため不適切です。

[答] a) オ b) エ

[設問2]


問題のSQL文では、WHERE句で利用表とアトラクション表を結合しています。そして、GROUP BY句で結合された表をアトラクションごとにグルーピングしています。この時点で出来上がった表は、アトラクション番号、アトラクション名、料金、入園者番号、利用時刻の項目からなり、アトラクションごとにグループ化されています。
従って、アトラクションごとの延べ利用者数を求めるには、この表のグループごとの行数を求めればOKです。ここで、AVGはグループ内の平均、COUNTはグループ内の行数、MAXはグループ内の最大値、SUMはグループ内の合計を求める関数なので、COUNTが適切となるため「イ」が正解です。

[答] c) イ

[設問3]

入園券でアトラクションを利用した入園者のうち、精算額が2000円以上の入園者と精算額を降順に表示するには、以下の順に処理を行う必要があります。
1. 入園者表、利用表、アトラクション表を結合
2. 券種が入園券(01)の入園者のみ抽出
3. GROUP BY句で入園者ごとにグルーピング
4. グループ内のアトラクション利用料金の合計が2000円以上のグループのみ抽出
5. ORDER BY句で料金の合計(支払金額)に応じて降順に並べ替え
1と5の処理は既に問題のSQL文に記載されているため、2〜4の処理を行っている「ウ」が正解となります。

[答] d) ウ

[設問4]


問題のSQL文では、以下の順に処理が行われます。
1. WHERE句で会員表と入園者表を結合
2. GROUP BY句で会員ごとにグループ化
3. HAVING句で入園日の最大値つまり最後に入園した日が20160101未満のグループのみ抽出
従って、最後の入園日が2016年1月1日より以前の会員つまり、2016年以降に1回も入園していない会員を求めているため、「エ」が正解となります。

[答] エ


上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。

0 件のコメント:

コメントを投稿