定期健康診断が問題に出ます
基本情報技術者試験 2019年(平成31年) 春 午後 問3 を考えてみましょう。
<問題>
定期健康診断のデータが登録されているデータベースに関する次の記述を読んで,設問1~3に答えよ。
D中学校では,年に1回,定期健康診断を実施し,結果をデータベースに登録している。
身長と体重の測定結果は,身長の単位はcm,体重の単位はkgとして,いずれも0.1刻みで健診結果表に登録している。定期健康診断を受ける生徒の生年月日,性別などの属性情報は,受診者情報表に登録している。
健診結果表を作成するSQL文の一部と,受診者情報表を作成するSQL文を次に示す。

ここで,DECIMAL(x,y)は固定小数点数を扱うデータ型であり,xは精度であって,表示する数字の桁数を示し,yは位取りであって,小数点以下の数字の桁数を示す。例えば,データベースに175.5を登録するには,xに4を,yに1を指定する。
健診結果表及び受診者情報表のデータ(以下,定期健康診断データという)から,身長と体重を統計データとして参照するために,測定結果ビューを使用する。測定結果ビューを作成するSQL文を次に示す。

2010年度から2019年度までの定期健康診断データを基に,男子生徒の体格の推移を見る。
<設問1>
2010年度から2019年度までの定期健康診断データを基に,男子生徒の体格の推移を見る。次のSQL文の実行結果を用いて,図1に示す体格推移表を作成した。平均身長と平均体重は小数第2位を四捨五入した値である。SQL文の□□□に入れる正しい答えを,解答群の中から選べ。ここで,c1とc2に入れる答えは,cに関する解答群の中から組合せとして正しいものを選ぶものとする。



この制約に従うと,転入生の定期健康診断の結果の情報の健診結果表への登録は,受診者情報表に転入生の情報を登録した後に行う必要がある。
<設問2>
次の記述中の□□□に入れる正しい答えを,解答群の中から選べ。
D中学校では,転入生を受け入れる場合,転出元の中学校から受領した定期健康診断の結果の情報をデータベースに登録する。健診結果表には,受診者IDと年度に□d□制約を設定し,受診者IDに受診者情報表の受診者IDへの□e□制約を設定している。この制約に従うと,転入生の定期健康診断の結果の情報の健診結果表への登録は,受診者情報表に転入生の情報を登録した後に行う必要がある。

身長度数分布表を作成したところ,”人数が相違している”との指摘があった。
<設問3>
次の記述中の□□□に入れる正しい答えを,解答群の中から選べ。
図2に示す身長階級表を作成し,これに対応させて,2019年度の男子生徒の定期健康診断データを基に,図3に示す身長度数分布表を作成したところ,”人数が相違している”との指摘があった。

図3に示す身長度数分布表の作成は,次の(1)~(3)の手順で行った。(1)図2に示す身長階級表をデータベースに作成した。
(2)新たなSQL文を作成した。
(3)(2)で作成したSQL文の実行結果を用いて,図3に示す身長度数分布表を作成した。
調査の結果,(2)で作成したSQL文に誤りがあることが分かった。(2)で作成したSQL文は,次のとおりである。このSQL文は,対象とした全生徒を必ずいずれかの身長区分に分類して集計するために,身長階級表からは全レコードを,測定結果ビューからはON句に指定した結合条件に一致するレコードを抽出している。

図1を見ると,2019年度は男子全学年での最大身長が180.1cmであり,190cm以上の生徒は存在しないが,図3の身長度数分布表では,190cm以上の人数が1となっている。この原因は,(2)で作成したSQL文では□f□とすべき箇所をCOUNT(*)としていることにある。その結果,測定結果ビューと身長階級表を結合した結果において,NULLとなっているレコードもカウントしているからである。

<設問1>
正解は a = (ア)
b=(ウ)
c=(ア)
<設問2>
正解は d = (エ)
e=(ウ)
<設問3>
正解は f = (ア)
コメント