プロが教えるわが家の防犯対策術!

以下のようなテーブルがあるとします。

user_id email_address
A    a@b.com
A    a@b.com
A    b@b.com
B    c@b.com
B    d@b.com
B    e@b.com

このテーブルから、同じuser_idでemail_addressの種類が3以上あるレコードを抽出したいと考えています。

出力結果
user_id email_address
B    c@b.com
B    d@b.com
B    e@b.com

このような結果を得たい場合、どのようなSQL文を記述すればいいでしょうか?

質問者からの補足コメント

  • 実はデータには以下のようなパターンもあります。

    user_id email_address
    C    f@b.com
    C    f@b.com
    C    g@b.com
    C    h@b.com
    上記のようなデータも抽出したいと考えています。

      補足日時:2016/01/19 20:42

A 回答 (2件)

ああ、まさに「email_addressの種類が3以上あるレコードを抽出したい」のですね


前の回答は全てがユニークなデータで構成されたレコードでした

SELECT * FROM hoge WHERE user_id IN (
SELECT user_id FROM hoge GROUP BY user_id HAVING count( DISTINCT email_address ) >=3
);

サブクエリの最後の数字が○○個以上の部分になります
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。解決しました!

お礼日時:2016/01/20 10:23

テーブル名をhogeだとして



select * from hoge where user_id in
(select user_id as e from hoge group by user_id having count(distinct email_address)=count(email_address))
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実は補足コメントにあるようなデータも存在していた事がわかりました。
このようなデータの場合、どうすればいいでしょうか?

お礼日時:2016/01/19 20:44

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

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