- ベストアンサー
group byとhavingの使用方法とは?
- group byとhavingを使用して、条件に基づいてグループ化されたデータを抽出する方法について説明します。
- テーブルのデータをidでグループ化し、指定したtag_noを持つidを抽出する方法について説明します。
- tag_noを複数指定する場合は、having句を使用してtag_no = 5 and tag_no = 9という条件を指定しますが、この条件は常にfalseとなります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> tag_noの5と9の両方を持つid(例に挙げたテーブルでいうと、1と2)のみを摘出したいのです。 とりあえず以下のSQLで上記の要件を満たせます。 (1と2ではなく1と3が抽出されますが) select t1.id from (select id from テーブル where tag_no = '5') as t1, (select id from テーブル where tag_no = '9') as t2 where t1.id = t2.id この要件でなぜgroup by とかhavingが出てくるのかわかりませんので 何か違うのかもしれませんが。 >グループのレコードに対する条件付けを認識しないようなのです。 ここを読む限り「group by」「having」に対する基礎的な理解が間違っているように思えます。「group by」「having」とは何か、どういうときに使うものなのかをもう少し勉強されたほうがいいと思います。
その他の回答 (4)
- root139
- ベストアンサー率60% (488/809)
CASE 式を使えば、HAVING 句だけでも「tag_noの5と9の両方を持つid」という条件をいちおう表現できますね。 例) ------------------------------------- SELECT id FROM テーブル GROUP BY id HAVING SUM(CASE tag_no WHEN 5 THEN 1 ELSE 0 END) >= 1 AND SUM(CASE tag_no WHEN 9 THEN 1 ELSE 0 END) >= 1 -----------------------------------------
お礼
こんな書き方もあるんですか・・・! ひとつひとつ検証させていただき、漏れなく活用させていただきます。 ご回答、ありがとうございました。m(_ _)m
- osamuy
- ベストアンサー率42% (1231/2878)
- yambejp
- ベストアンサー率51% (3827/7415)
select id from hoge where tag_no in(5,9) group by id having count(distinct tag_no)=2
お礼
びしっと出ました! 条件に合致した数を条件にする・・・思いつきませんでした。 ありがとうございますm(_ _)m
- osamuy
- ベストアンサー率42% (1231/2878)
お礼
なるほど・・・ 「group by」「having」について、もう一度勉強してきます。 恥ずかしながら、書いていただいたクエリのような書き方を初めて見ましたので、新たな気づきになりました。 貴重な知識を、ありがとうございます。m(_ _)m