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;