平成24年秋期午後問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
あさがおさん  
(No.1)
https://www.fe-siken.com/kakomon/24_aki/pm02.html
上記の設問4についてお教えください。回答ではDISTINCTが必要となっています。
その理由、次の(1)(2)の順番で考えれば良いのでしょうか?

(1)まず最初に、
WHERE = AND
        = AND
        = AND
の部分によって、表が結合されて、重複が復活する(排除された関係従属性が元に戻った)。

(2)今回の設問の「h」の部分は、上記の「巨大に戻ってしまった表」を対象にして考える必要があるために、DISTINCTが必要である。

この考え方で良いのでしょうか?
2020.08.26 20:19
メタルさん 
FE ブロンズマイスター
(No.2)
10回以上の発注とあり、
同一発注表で複数の商品の発注がされているとその件数がカウントされてしまい注文の回数とは違う結果になってしまう。
為だそうです。
2020.08.30 02:28
たけしさん 
(No.3)
まず、カウントディスティンクトの意味はご存じですか?重複を除いた件数すなわち何種類かが取得できます。

取得したいのは発注数です。発注一回につき発注コードが一種類振られます。ということは、発注コードの種類数が発注数となります。という事でディスティンクトがつきます。

なぜただのカウントではダメか↓

結合の仕組みはご存じですか?この問題の場合、発注表、明細を結合するとレコード数は明細のレコード数になります。(なぜそうなるか理解できない場合は、結合について調べてみてください。結合はRDBではかなり重要な要素です)

ただ単に発注コードをカウントすると、それは結合後の表のレコード数がとれてしまいます。ということは明細の件数がとれてしまうのです。
※ちなみにcount(取引先コード)にしようがcount(品目名)にしようがcount(1)にしようが全部結果は一緒で明細の数が取得されます。

結合後はこんなイメージです
発注コード 商品コード
A               1
A               2
B               1
C               1
C               2
C               3

ただの発注コードカウント → 6件
カウントディスティンクト → 3件


2020.09.03 14:57
あさがおさん  
(No.4)
詳しく説明いただき、ありがとございます。
スレッド最初の、当方の質問「この考え方で良いのでしょうか?」について、ストレートに「その通り」「間違い」で言うと、どちらになるのでしょう?
(最初の質問、いろいろ書きすぎてしまい、分かりにくくなった点はお詫びします)  

たけしさん(No.3)の説明の「発注表、明細を結合するとレコード数は明細のレコード数になります」というのは、要するに、私がスレッドの最初の文章内に記載した「重複が復活する」という意味と同じだと思うのですが、その解釈で良いですよね?
2020.09.05 21:26

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop