狙った分野の午後問題をやっつけたいよPart2・・・遊園地の入園者情報を管理する関係データベース『設問2』
#基本情報技術者試験 #平成28年 #春期 #午後 #データベース #SQL
設問1は終わった。次は設問2で、SQL文の空欄を埋めるやつ。
まず、問題文をチェック。
シンプル。
アトラクションごとの、延べ利用者数を調べたいそう。
確かに、テーマは入園者の利用状況収集だからね。
次にSQL文。
そんなに複雑じゃない。
解答群。
これもシンプル。
どれが、アトラクションごとの延べ利用者数を集計できるか?を順番に調べる。
ア.AVG(利用表.アトラクション番号)
利用者表のアトラクション番号の平均を出してくれる。
アトラクション番号っていうのは、乗り物に付けた番号だった。
例えば、04は観覧車、05はゴーカートとか。
その番号の平均って・・・ちょっと何に使えるか思いつかないので、候補から一旦はずした。
イ.COUNT(*)
COUNTは件数を出してくれる。カッコの中が*なので、データ件数を調べてくれる。件数は、人数になりそうだから、候補としてキープ。
ウ.MAX(利用表.アトラクション番号)
MAXは最大値を求める。乗り物に付けた番号の最大値を出して、利用者数は出せそうにない。これもアと同じく、候補から外した。
エ.SUM(利用表.アトラクション番号)
SUMは合計を計算してくれる。乗り物に付けた番号の合計か、どうかな?
アトラクション番号が04のデータが3件あったとして、数値として合計すると12が求められる。
その12は、延べ利用者人数か?
ちがう。かなり水増しした感じになってる。
04のデータが3件あるなら、延べ利用者人数は3のはず。
もし迷うなら、イとエで迷うよね。
考えてみて、エも違うとわかったけど、念のためイでいいのか?も考えてみようかな。
イのCOUNT(*)を、SQL文の空欄Cに当てはめると、
こうなって、
COUNT(*)は件数を求めるから、表示されるのは、アトラクション番号とアトラクション名と件数ということになる。
FROMのところは、表(テーブル)名。利用者表と、アトラクション表を使うよ、という意味。
WHEREは、今回は二つの表のひもづける(つなげる)条件が書かれている。
利用者表とアトラクション表の二つを連結して使いたいので、番号同士でつなげてくださいね、ということ。
GROUP BYは、グループ化について書くところ。
たしかに、問題文にはアトラクションごとの利用者数と書いてあった。
だから、アトラクションごとにグループを作って、そのグループの中に利用者が何人いるのか?を調べるんだな。
04番の観覧車は〇〇人
05番のゴーカートは△△人
というように。
■■ごとにというキーワードが出てきたら、GROUP BYで■■のグループを作るんだな。
GROUP BYで作ったグループに何件のデータがあるか?を調べると、そのグループの延べ利用者人数が確かに分かるね。
「それだと、同じ利用者が何度もカウントされる」と心配になるけど、延べ利用者数を調べたいとのことだから、それでいいのだ。