ページのトップに戻る
Symfoware Server SQLビギナーズガイド

6.1.2 グループ化した表から処理対象のグループを特定する

表式では、FROM句に指定した表から、WHERE句を指定して処理対象の行を特定することができるように、GROUP BY句でグループ化した表から、処理対象のグループを特定することができます。それにはHAVING句を使用します。HAVING句の指定例を以下に示します。

図6.1 GROUP BY句で導出される表の例”のグループ表から、製品番号が2種類以上ある製品の、製品名と在庫数量の合計を求めます。

SELECT 製品名, SUM(在庫数量)

       FROM 在庫管理.在庫表

       GROUP BY 製品名

       HAVING   COUNT(製品名) >= 2
        (A)             (1)

(1) 探索条件

(A)~(1) HAVING句

HAVING句によって導出される表と、問合せ指定の結果を“図6.7 HAVING句で導出される表の例”に示します。

図6.7 HAVING句で導出される表の例

注) 集合関数の結果の列には名前がありません。

HAVING

HAVING句には、処理対象のグループを特定するための探索条件を指定します。条件とする列は、グループ化列か、集合関数で指定することが必要です。グループ化列でない列を集合関数以外で指定するとエラーになります。

なお、グループ化列を指定する条件はHAVING句ではなく、WHERE句でも指定できます。HAVING句はグループ化した表を対象にしますが、WHERE句はグループ化する前の段階で処理対象の行を特定するため、そのような条件はWHERE句に指定した方がSQL文の処理効率がよくなることがあります。例えば、上記の例の問合せ指定で、製品名が“テレビ”の行を導出する場合、“製品名 = N'テレビ'”という条件はWHERE句に指定します。