※ ChatGPTを利用し、要約された質問です(原文:重複データを除いてカウントしたい
)
重複データを除いてカウントしたい
このQ&Aのポイント
PHP+MySQLでWEBサイトを作ろうとしている者です。以下の問題を解決したい。
2つのテーブルがあり、レンタルした顧客の都道府県が月別にカウントされるようにしたい。
顧客数をカウントしようとすると重複が発生してうまく顧客数だけに結果を導くことができません。どのような式にしたら想定する結果が導き出せるのでしょうか。
重複データを除いてカウントしたい
お世話になります。
PHP+MySQLでWEBサイトを作ろうとしている者です。
どうしても自分ではわからないことがあって質問いたします。
以下ような2つのテーブルがあり、
レンタルした顧客の都道府県が
月別にカウントされるようにしたいと考えています。
テーブルA(顧客情報)
顧客名 都道府県
(name) (prefec)
Aさん 東京都
Bさん 千葉県
Cさん 神奈川県
Dさん 東京都
Eさん 千葉県
テーブルB(レンタル・レンタル品目情報)
顧客名 期間(開始月・返却月) レンタル品目
(name) (start)(end) (item)
Aさん(東京) 1月 6月 自動車
Aさん(東京) 1月 6月 オートバイ
Aさん(東京) 2月 6月 チャイルドシート
Bさん(千葉) 3月 5月 自動車
Bさん(千葉) 3月 5月 チャイルドシート
Cさん(神奈川) 1月 2月 自動車
Cさん(神奈川) 2月 3月 オートバイ
Dさん(東京) 2月 4月 自動車
Eさん(千葉) 3月 6月 オートバイ
想定する結果は
1月は
東京(1人) 千葉(0人) 神奈川(1人)
2月は
東京(2人) 千葉(0人) 神奈川(1人)
3月は
東京(2人) 千葉(2人) 神奈川(1人)
となります。
品目数であれば以下の式でカウントできるのですが、
顧客数をカウントしようとすると重複が発生して
うまく顧客数だけに結果を導くことができません。
SELECT prefec,COUNT(name) AS cnt FROM tbla
INNER JOIN tblb USING(name)
WHERE (指定月 BETWEEN start AND end)
GROUP BY prefec
参考までに上の式では
1月は
+----------+-----+
| prefec | cnt |
+----------+-----+
| 東京都 | 2 |
| 神奈川県 | 1 |
+----------+-----+
2月は
+----------+-----+
| prefec | cnt |
+----------+-----+
| 東京都 | 4 |
| 神奈川県 | 2 |
+----------+-----+
3月は
+----------+-----+
| prefec | cnt |
+----------+-----+
| 千葉県 | 3 |
| 東京都 | 4 |
| 神奈川県 | 1 |
+----------+-----+
となります。
この場合、どのような式にしたら想定する結果が導き出せるのでしょうか。
よろしくご教授をお願いいたします。
お礼
早速のご回答ありがとうございます。 ご教授いただいた方法でできました。 実はdistinctも試していたのですが、 恥ずかしながらこの使い方は知りませんでした。 どうもありがとうございました。