3.6.10. GROUP BY 句
GROUP BY 句は、指定した式の値に基づいて行をグループ化する必要があることを示します。各グループに 1 つの行が返され、必要に応じて HAVING 句に基づいてこれらの集約行をフィルターします。
GROUP BY の一般的な形式は次のとおりです。
GROUP BY expression [,expression]*
GROUP BY expression [,expression]*
GROUP BY ROLLUP(expression [,expression]*)
GROUP BY ROLLUP(expression [,expression]*)
構文ルール
- SELECT 句のエイリアス名に対しては、グループの列参照を作成できません。
- 別のグループで使用される式は、select 句に表示されるはずです。
- グループごとに使用されない SELECT/HAVING/ORDER BY 句の列参照と式は集約関数に表示されるはずです。
- 集約関数が SELECT 句で使用され、GROUP BY が指定されていない場合、暗黙的な GROUP BY は結果を単一グループとして設定された状態で実行されます。この場合、SELECT のすべての列は集約関数である必要があります。これは、グループ全体で他の列の値が修正されないためです。
- GROUP BY 列は、同じタイプである必要があります。
Rollups
通常のグループと同様に、ROLLUP 処理は、HAVING 句が処理される前に論理的に実行されます。式の ROLLUP は、より高い集約レベルで計算された値の集約値を追加して、正規表現と同じ出力を生成します。ROLLUP の N 式では、(expr1)、(expr1、expr1、expr1、expprN-1)などの集計は、出力に他のグルーピング式を null 値として提供します。以下の例では、通常の集約クエリーを使用します。
SELECT country, city, sum(amount) from sales group by country, city
SELECT country, city, sum(amount) from sales group by country, city
クエリーは以下のデータを返します。
country | city | sum(amount) |
---|---|---|
US | St. Louis | 10000 |
US | Raleigh | 150000 |
US | Denver | 20000 |
UK | birmingham | 50000 |
UK | ロンドン | 75000 |
一方、以下の例ではロールアップクエリーを使用します。
ロールアップクエリーから返されるデータ
SELECT country, city, sum(amount) from sales group by rollup(country, city)
SELECT country, city, sum(amount) from sales group by rollup(country, city)
戻り値は以下のようになります。
country | city | sum(amount) |
---|---|---|
US | St. Louis | 10000 |
US | Raleigh | 150000 |
US | Denver | 20000 |
US | <null> | 180000 |
UK | birmingham | 50000 |
UK | ロンドン | 75000 |
UK | <null> | 125000 |
<null> | <null> | 305000 |
すべてのソースが ROLLUP と互換性がなく、通常の集約処理と比較すると、ROLLUP を使用すると一部の最適化が抑制される可能性があります。
現在、Data Virtualization での ROLLUP の使用は、SQL 仕様と比較して制限されます。