dポイントプレゼントキャンペーン実施中!

SQLを使うことが初めての、本当にど素人です。
質問の仕方自体おかしいかもしれませんが、どなたか下記条件でデータ抽出するSQLの書き方を教えて下さい。

【抽出条件】
1つの商品購入テーブルから、5月と6月に購入してて、7月と8月に購入していない、東京都と神奈川県在住の方の顧客IDと購入商品すべてを抽出できないでしょうか?

カラムは、顧客ID、購入月、顧客都道府県、商品コードとそれぞれ分かれています。

この内容で、ご回答いただけますでしょうか?
何卒よろしくお願いします。

A 回答 (2件)

「今までに一度も購入したことがない人」であれば商品購入テーブルにいないので別ですが、今回は最低一回は購入した人が対象になっているので、差分をとるようなクエリが適当だとは思えないです。



いろいろ方法はあるでしょうけど、とりあえず購入月は数字で入っているとして考え方を示しますと、以下のようになります。

SELECT
顧客ID,
商品コード
FROM 商品購入テーブル
WHERE 顧客都道府県 IN ('東京都','神奈川県')
AND 顧客ID IN (SELECT 顧客ID FROM 商品購入テーブル WHERE 購入月=5)
AND 顧客ID IN (SELECT 顧客ID FROM 商品購入テーブル WHERE 購入月=6)
AND 顧客ID NOT IN (SELECT 顧客ID FROM 商品購入テーブル WHERE 購入月 IN (7,8))

しかし、これはさすがに効率がよくないので、
「5月と6月に購入してて、7月と8月に購入していない]の部分はGROUP BYを使って一括で条件指定するのも手です。

SELECT
顧客ID,
商品コード
FROM 商品購入テーブル
WHERE 顧客都道府県 IN ('東京都','神奈川県')
AND 顧客ID IN
(SELECT 顧客ID
FROM 商品購入テーブル
WHERE 購入月 BETWEEN 5 AND 8
GROUP BY 顧客ID
HAVING SUM(CASE WHEN 購入月=5 THEN 1 ELSE 0 END)>0
AND SUM(CASE WHEN 購入月=6 THEN 1 ELSE 0 END)>0
AND SUM(CASE WHEN 購入月 IN (7,8) THEN 1 ELSE 0 END)=0)
    • good
    • 0
この回答へのお礼

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

2つ目の方法で、うまくデータを抽出することができました。

1つ目の方法も、今後の参考に
いろいろ試してみたいと思います。

お礼日時:2009/11/25 01:47

select 必要なフィールド


from 商品購入テーブル
where 5月に購入 and 6月に購入 and 7月に未購入 and 8月に未購入
and (東京在住 or 神奈川在住)

ってな感じでしょうか?

この回答への補足

さっそくの回答ありがとうございます。

こちらの説明不足と無知のため、さらに質問なのですが。。。

この商品購入テーブルは、購入した履歴が溜まっていくものなので、
未購入履歴がありません。
(顧客IDは持っているが、顧客IDの管理は別テーブルになります。)

なので、5月と6月に購入している人たちと、7月と8月に購入している人たちを比べて、5月と6月しか購入していない人を抽出するというSQLの書き方を教えていただければと思います。

今回教えていただいた方法がそれを満たしているのかもしれませんが、
未購入者の出し方が分からないため、教えていただければと思います。

何卒よろしくお願いします。

補足日時:2009/11/23 17:02
    • good
    • 0

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

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