グループ値の要約

1 つ以上の列の値、または式の結果によって結果表の行をグループに分けることができます。 次に、グループごとに集約関数を適用できます。

プロシージャー

グループ値を要約するには :

GROUP BY節を使います。

GROUP BY 文節を使用するとき、この文節を置く場所は、FROM 文節およびすべての WHERE 文節の後ろで、ORDER BY 文節の前です。

GROUP BY 文節で名前を指定した列を除き、SELECT ステートメントでは、選択される他のどの列も、いずれかの集約関数のオペランドとして指定する必要があります。

GROUP BY 節で指定した列にNULL 値が含まれる場合、Db2はそれらのNULL 値が等しいと見なします。 つまり、すべての NULL が単一のグループを形成することになります。

例: 1 つの列を使用する GROUP BY 節
次の SQL ステートメントは、部門ごとに、その部門内の最低と最高の教育レベルをリストします。
SELECT WORKDEPT, MIN(EDLEVEL), MAX(EDLEVEL)
   FROM DSN8D10.EMP
   GROUP BY WORKDEPT;
例: 複数の列を使用する GROUP BY 節
行は、複数の列の値別にグループ分けすることができます。 例えば、以下のステートメントは、部門 A00 とC01 の男女平均給与を検出します。
SELECT WORKDEPT, SEX, AVG(SALARY) AS AVG_SALARY
   FROM DSN8D10.EMP
   WHERE WORKDEPT IN ('A00', 'C01')
   GROUP BY WORKDEPT, SEX;
結果表は、以下の出力のようになります。
WORKDEPT   SEX     AVG_SALARY
========   ===     ==============
A00        F       49625.00000000
A00        M       35000.00000000
C01        F       29722.50000000
Db2 各グループの平均SALARY値を導出する前に、最初に部門番号で行をグループ化し、次に(各部門内で)性別で行をグループ化します。
例: 式を使用する GROUP BY 節
式の結果によって行をグループ化することもできます。 たとえば、次のステートメントは、部門を指導者でグループ化し、各グループの最低と最高教育レベルをリストしています。
SELECT SUBSTR(WORKDEPT,1,1), MIN(EDLEVEL), MAX(EDLEVEL)
   FROM DSN8D10.EMP
   GROUP BY SUBSTR(WORKDEPT,1,1);