行グループの集約
結果の各行が、基になるデータの行グループ全体に対応するクエリ結果を作成できます。 行を集約するときは、次の点に注意してください。
重複する行を除外する クエリによっては、同じ行が複数出現する結果セットが作成されます。 たとえば、著者の居住地の市町村名と州名を各行に含む結果セットを作成するとします。この場合、複数の著者が住む市町村があると、同じ行が複数作成されます。 結果の SQL ステートメントは次のようになります。
SELECT city, state FROM authors
前のクエリで生成される結果セットは、あまり役に立ちません。 たとえば、ある市に 4 人の著者が住んでいる場合、結果セットには同じ行が 4 つ含まれることになります。 結果セットには市町村名と州名以外の列は含まれていないので、同じ行を相互に区別する方法はありません。 重複する行の生成を防ぐ 1 つの方法は、各行を区別する列を追加することです。 たとえば、著者の名前の列を加えると、同じ市内に同じ名前の著者が 2 人いない限り、各行を区別できるようになります。 結果の SQL ステートメントは次のようになります。
SELECT city, state, fname, minit, lname FROM authors
上のクエリを使うと問題の状況は回避できますが、この方法では、問題を根本的に解決することはできません。 つまり、結果セットから重複が除去される代わりに、結果セットが市町村に関するものではなくなってしまいます。 元の結果セットにあった重複を除去し、その上で各行が市町村の情報を示すようにするには、異なる行だけを返すクエリを作成します。 結果の SQL ステートメントは次のようになります。
SELECT DISTINCT city, state FROM authors
重複の除去の詳細については、「方法 : 重複行を除外する」を参照してください。
行グループに対して計算を行う 行グループの情報をまとめることができます。 たとえば、著者の居住する市と州の名前、およびその市に居住する著者の人数を各行に格納した結果セットを作成できます。 結果の SQL ステートメントは次のようになります。
SELECT city, state, COUNT(*) FROM authors GROUP BY city, state
行のグループの計算については、「クエリ結果の集計」および「クエリ結果の並べ替えおよびグループ化」を参照してください。
行グループを含む選択条件を使用する たとえば、複数の著者が住んでいる市と州の名前、およびその市に住んでいる著者の数が各行に格納された結果セットを作成できます。 結果の SQL ステートメントは次のようになります。
SELECT city, state, COUNT(*) FROM authors GROUP BY city, state HAVING COUNT(*) > 1
行のグループに選択基準を適用する方法の詳細については、「方法 : グループの条件を指定する」および「方法 : 同一クエリ内で HAVING 句および WHERE 句を使用する」を参照してください。