(世帯表)
世帯番号 世帯主番号 住所 電話番号 班
0181 0412 ***** ***** 2
(会員表)
会員表 世帯番号 氏名 続柄 生年月日
0413 0181 ***** 01 *******
0413 0181 ***** 02 ********
班ごとの世帯数と会員数を集計する
selest 世帯表.班,count(distinct世帯表.世帯番号),count(*)
from 世帯表,会員表
where 世帯表.世帯番号=会員表.世帯番号
group by 世帯表.班
世帯表の世帯番号は一意なのになぜdistinctが必要なのでしょうか
ふたつの表を結合している(from 世帯表,会員表)ということは、以下のような表を対象に select しているということです。
世帯表.世帯番号 | 世帯表.世帯主番号 | 世帯表.住所 | 世帯表.電話番号 | 世帯表.班 | 会員表.会員番号 | 会員表.世帯番号 | 会員表.氏名 | 会員表.続柄 | 会員表.生年月日 |
---|---|---|---|---|---|---|---|---|---|
0181 | 0412 | ***** | ***** | 2 | 0412 | 0181 | ***** | 01 | ******** |
0181 | 0412 | ***** | ***** | 2 | 0413 | 0181 | ***** | 02 | ******** |
と考えれば、distinct は要りますよね。
まったく同じ質問が新しく投稿されていますが、どこが分からなかったのか具体的に追加しないと回答がつきにくいと思います。
また、回答への返信コメントで聞いても、a-kuma3さんでしたら答えてくれると思います。
※回答内のコメント欄は、質問者さん本人と回答者さん本人のみ質問終了後でも投稿できます。
目的は『班ごとの世帯数と会員数を集計する』ですね?
『班ごとの会員数』でしたら「distinct」なしで正しいデータが取れますが、『班ごとの世帯数』は「distinct」が必要になります。
selest 世帯表.班,count(distinct世帯表.世帯番号),count(*)
from 世帯表,会員表
where 世帯表.世帯番号=会員表.世帯番号
group by 世帯表.班
質問文の例のように、会員表に同じ世帯番号の人が2名登録された状態で、上記を実際に実行してみるとわかると思います。
「distinct」なしだと、世帯数が2にならないでしょうか?
2016/12/07 01:16:30 : もうひとつのコピペ質問
2016/12/07 04:53:39 : この質問の回答のコメント
という時系列なので、何が分かってなかったか(表の「結合」とは何ぞや、ということ)に気が付いたんだと思うんですけれど。