• ベストアンサー

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を組み立てたいのですが よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)
回答No.1

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));

関連するQ&A