見出し画像

狙った分野の午後問題をやっつけたいよPart2・・・遊園地の入園者情報を管理する関係データベース『設問3』

#基本情報技術者試験 #平成28年 #春期 #午後 #データベース #SQL

設問2に引続きSQL文の問題、設問3。
大事そうなところをマークしていく。

すごく黄色~。

なので、「大事そうなところリスト」を作ってみた。

次に、SQL文をSELECTから順番に見ていく。

これは、大事そうなところリストの(4)。だからもう(4)は考えなくていい。

次はFROMで、ここには使いたい表が3つ書かれている。

使いたい表が二つ以上あるときは、WHEREでひもづけの条件が書かれるはず。

次はWHERE、色々書いてある。

まずはWHEREの一行目だけど、入園者番号どうしで、入園者表と利用表をつなげているところ。二つの表のひもづけ。

WHEREの二行目は、アトラクション番号どうしで、利用表とアトラクション表をつなげている。これも二つの表のひもづけ。

WHEREの三行目は、空欄なので飛ばして、ORDER BYのところ。

ORDER BYは並べ替えをするキーワード、DESCとつけると降順(大きい順)なので、支払金額の多い順に並べているのがここ。
大事そうなところリストの(3)はもう出来ているということだね。

ここまでで、大事そうなところリストのうち2つは、もう出来ているということがわかった。

リストの残り3つが実現できるやつを、解答群から見つけるぞ!お~!

解答群を見てみると、4つとも、出だしが「入園者表.券種 = '01'」になってるね。これでリストの(1)と(5)が出来ている。

残るのは(2)の、2,000円以上払った人が対象というやつ。
もう一度見てみると、4つ全部にGROUP BYがある。
GROUP BYはグループを作るんだったよね。
では、それをチェック。

GROUP BYに注目すると、
 アとエ・・・アトラクションごとにグループを作っている
 イとウ・・・入園者ごとにグループを作っている
という2パターンにわかれた。
どっちかに決めようと思う。

リストの(2)は、2,000円以上払った人だ。なのだ!
だから、入園者(=人)ごとにグループを作って、料金の集計をしなきゃ。
もし、アトラクションごとにグループ作って、料金を集計したとしたら、2,000円以上の売上があったアトラクションってことになる。
よって、イかウのどっちか。

じゃあ、イとウの違いはどこか?
MAX(=最大値を求める)を使っているのがイ、SUM(=合計を求める)を使っているのがウ。
その人が2,000円以上払ったか?退園するときに精算したか?を調べたいので、払った料金の合計をしなきゃいけないよね。

ウにきまり。


今回はあまり気にしなくてよかったけど、HAVINGっていうのは、GROUP BYとか集合関数(AVG、SUMなどなど)と一緒に出てくるよね。WHEREと同じように絞り込みをしてくれるのがHAVINGなんだけど、グループごとの集計結果を絞り込み条件にしたいときは、HAVINGを使うよ。

この記事が気に入ったらサポートをしてみませんか?