- ベストアンサー
sql文について教えて下さい
お世話になっております select文を教えて下さい A B 123 0 123 0 123 1 123 1 124 0 124 1 124 2 125 0 125 1 125 1 Aの項目でグルーピングしBが0のデータが2件以上あるケースを選択したいのですが良く分かりません。 上記の場合は、A=123のケースだけを選択したいのですが どなたかご教示下さい。 A B 123 0 123 0 という結果になるようにSQLを組み立てたいのですが よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
特定のRDBMSで実行するなら、RDBMS名やバージョンを 書きましょう。 せっかくSQLを具体的に教えてもらっても、あなたの 環境では実行できないかも知れません。 情報処理技術者試験の受験対策といった理由なら、 そういった情報を書きましょう。 特定のRDBMSの独自機能を使ったSQLを教えられても、 正解にはなりません。 B=0での抽出なので、A列の値だけ分かればいいなら、 以下のようなSQLでいいと思います。 select A from T1 where B=0 group by A having count(*)>=2; 他にC列などがあり、その値も得たいということなら、 以下のようなSQLでいいと思います。 select A,C from T1 where A=(select A from T1 where B=0 group by A having count(*)>=2 ) and B=0; また、#1回答者さんのSQLでも大丈夫だと思いますが、 不要な括弧が多いので簡単に書くと、以下のように なります。 select A,C from T1 as x where (select count(*) from T1 as y where x.A=y.A and y.B=0)>=2 and x.B=0; 私が使っているRDBMSでは、列(A,B)にインデクスを 付けた場合、二番目のSQLの方が、効率的にインデクス が使われるようです。
その他の回答 (1)
- CHRONOS_0
- ベストアンサー率54% (457/838)
SELECT jiji.A, jiji.B FROM jiji WHERE (((jiji.B)=0) AND (((select count(*) from jiji as jiji2 where jiji2.A=jiji.A and jiji2.B=0))>1));