重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

重複データを除いてカウントしたい

お世話になります。
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 |
+----------+-----+
となります。

この場合、どのような式にしたら想定する結果が導き出せるのでしょうか。
よろしくご教授をお願いいたします。

A 回答 (1件)

OracleだとCOUNT(distinct name) と記述できますが、MySQLはどうでしょう?

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

ご教授いただいた方法でできました。
実はdistinctも試していたのですが、
恥ずかしながらこの使い方は知りませんでした。

どうもありがとうございました。

お礼日時:2009/12/21 23:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す