Group BY 句

GROUP BY 句を使用すると、ビューまたは式の属性の値に基づいてクエリの結果をグループ化し、そのグループごとに行を生成できます。Group BY 操作の基準となる属性と式は GROUP BY 句で指定します。

クエリに GROUP BY 句がなくても、 SELECT 句で集計関数を使用していれば、その SELECT ステートメントで取得したすべての結果によって単一のグループが形成されます。

クエリに GROUP BY 句がある場合は、 SELECT 句の内容が制限されます。この場合は、 GROUP BY 句で指定した属性のみを SELECT 句で指定できます。ビューのその他の属性は、集計関数のパラメーターとしてのみ使用できます。集計関数を SELECT 句で指定している場合は、新しい属性の別名を指定する必要があります。別名を指定しない場合は、Virtual DataPort サーバーによって自動的に別名が生成されます。

group-by ビューでは、 SELECT 句でも派生属性の関数を指定できますが、その場合は集計フィールドまたは集計関数のみが対象となります。

集計関数の使用

集計関数は、 GROUP BY 操作で得られたグループに属するタプルに適用され、そこから集計値を算出します。Virtual DataPort に存在する集計関数の一覧については、付録「 集約関数 」を参照してください。

集計関数は、事前に定義した関数の一般的な構文 (「 構文規則 」を参照) に従いますが、変更対象となる属性の名前のみはパラメーターにすることが認められています (ネスト化した関数は使用できません)。

修飾子 ALL および DISTINCT も指定できます。

例外は COUNT() 集計関数です。この関数は、各グループに属するタプルの数を返すことを指定する特殊文字 * をパラメーターとして受け取ることができます。

たとえば、会社の従業員を表すリレーション emp があり、そのリレーションには、各従業員の所属先部署を示す属性 department がある場合、各部署とそこに所属する従業員数を取得するには、以下のクエリを実行します。

SELECT count(*) AS numOfWorkers, department
FROM emp
GROUP BY department;

また、フィールドの別名を使用すると以下のようになります。

SELECT count(*) AS numOfWorkers, department AS dept_name
FROM emp
GROUP BY dept_name;