昨日の問題を解いた
※また難しめの話なので、お急ぎの方は最後の2行だけ読めば理解できます。
昨日の問題、
"社員"表に対して次の SQL を実行した結果として,正しいものはどれか。
完全に把握した!
まず同じ表をS1,S2として使うので、1レコードに対して全レコードがくっつきます。
S1.生年 >= S2.生年
って条件があるので、自分自身も含め生年が小さいのはそれぞれ
- 00001 織田 信夫 1943
- 00001,00004
- 00002 武田 信二 1968
- 00001,00002,00004,00005,00006,00007,00009,00010
- 00003 柴田 勝男 1970
- 00001,00002,00003,00004,00005,00006,00007,00009,00010
- 00004 浅井 長吉 1943
- 00001,00004
- 00005 三浦 一郎 1953
- 00001,00004,00005
- 00006 今川 義一 1954
- 00001,00004,00005,00006
- 00007 羽柴 吉秀 1962
- 00001,00004,00005,00006,00007,00009,00010
- 00008 毛利 輝夫 1975
- 00001,00002,00003,00004,00005,00006,00007,00008,00009,00010
- 00009 伊達 正雄 1961
- 00001,00004,00005,00006,00009,00010
- 00010 細川 太郎 1957
- 00001,00004,00005,00006,00010
となります。
HAVING COUNT(*) <= 3
なので、それぞれの人の所に含まれる番号が3件以下の人が出ます。
対象の人は「00001(1943)」「00004(1943)」「00005(1953)」ですが、生年でDISTINCTするので、00001と00004は合計します。よって1943は合計4件になるので3件以下の条件からはずれます。つまり「1953」だけが出力されるってワケだ!やったッ!第三部完!!
おかげさまで、午前問題はまあまあ合格圏内に入れそうです・・・。
あとは午後問をしっかりやっておかないとなー。