質問: sql文の書き方 sql文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがsql文の書き方がわかりません。 データの発生条件としては tablebのfield1は必ずtableaのfield1に存在するという条件です。 tableaのfield1が「aaa」から「eee」まである場合は、tablebのfield1も必ず「aaa」から「eee」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- tablea field1 ---------------------------------------------------------------- aaa aaa aaa bbb bbb ccc ddd ddd eee eee eee ---------------------------------------------------------------- field1をサマライズしてカウントと名称を取得するクエリー select count(tablea.field1) as reccount, tablea.field1 from tablea 結果 reccount field1 3 aaa 2 bbb 1 ccc 2 ddd 3 eee ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- tableb field1 ---------------------------------------------------------------- bbb ccc ccc eee ---------------------------------------------------------------- field1をサマライズしてカウントと名称を取得するクエリー select count(tableb.field1) as reccount, tableb.field1 from tableb 結果 reccount field1 1 bbb 2 ccc 1 eee ---------------------------------------------------------------- 希望する結果 tableaのreccount tablebのreccount tableaのfield1 3 aaa 2 1 bbb 1 2 ccc 2 ddd 3 1 eee
回答: >field1をサマライズしてカウントと名称を取得するクエリー >select count(tablea.field1) as reccount, tablea.field1 from tablea 「group by field1」の指定が必要です。 >field1をサマライズしてカウントと名称を取得するクエリー >select count(tableb.field1) as reccount, tableb.field1 from tableb 「group by field1」の指定が必要です。 >希望する結果 表名、列名は、簡単化していますが、下記のようなsqlになります。 select acnt,bcnt,x.f1 from (select count(*) as acnt,f1 from a group by f1) as x left join (select count(*) as bcnt,f1 from b group by f1) as y on x.f1=y.f1