以下のような表があります

(世帯表)
世帯番号 世帯主番号 住所     電話番号  班
0181   0412   *****    *****   2
(会員表)
会員表  世帯番号  氏名  続柄  生年月日
0413   0181   *****  01  *******
0413   0181   *****  02  ********
班ごとの世帯数と会員数を集計する
selest 世帯表.班,count(distinct世帯表.世帯番号),count(*)
from 世帯表,会員表
where 世帯表.世帯番号=会員表.世帯番号
group by 世帯表.班
世帯表の世帯番号は一意なのになぜdistinctが必要なのでしょうか

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/12/06 02:27:55
  • 終了:2016/12/07 04:53:51

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4624ベストアンサー獲得回数19592016/12/06 08:40:31

ふたつの表を結合している(from 世帯表,会員表)ということは、以下のような表を対象に select しているということです。

世帯表.世帯番号世帯表.世帯主番号世帯表.住所世帯表.電話番号世帯表.班会員表.会員番号会員表.世帯番号会員表.氏名会員表.続柄会員表.生年月日
01810412 ***** *****204120181 *****01 ********
01810412 ***** *****204130181 *****02 ********

と考えれば、distinct は要りますよね。

id:kazuyox

ありがとうございました根本的なところで分かっていないことがわかりました

2016/12/07 04:53:39
  • id:rouge_2008
    横からですが失礼します。

    まったく同じ質問が新しく投稿されていますが、どこが分からなかったのか具体的に追加しないと回答がつきにくいと思います。
    また、回答への返信コメントで聞いても、a-kuma3さんでしたら答えてくれると思います。
    ※回答内のコメント欄は、質問者さん本人と回答者さん本人のみ質問終了後でも投稿できます。


    目的は『班ごとの世帯数と会員数を集計する』ですね?
    『班ごとの会員数』でしたら「distinct」なしで正しいデータが取れますが、『班ごとの世帯数』は「distinct」が必要になります。

    selest 世帯表.班,count(distinct世帯表.世帯番号),count(*)
    from 世帯表,会員表
    where 世帯表.世帯番号=会員表.世帯番号
    group by 世帯表.班

    質問文の例のように、会員表に同じ世帯番号の人が2名登録された状態で、上記を実際に実行してみるとわかると思います。
    「distinct」なしだと、世帯数が2にならないでしょうか?
  • id:a-kuma3
    >まったく同じ質問が新しく投稿されていますが、どこが分からなかったのか具体的に追加しないと回答がつきにくいと思います。
    2016/12/07 01:16:30 : もうひとつのコピペ質問
    2016/12/07 04:53:39 : この質問の回答のコメント

    という時系列なので、何が分かってなかったか(表の「結合」とは何ぞや、ということ)に気が付いたんだと思うんですけれど。
  • id:rouge_2008
    もう一つは後でキャンセルですか・・・

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません