ROLLUP
はGROUP BY
の拡張機能で、指定された属性グループにまたがる複数の小計のレベルの計算を可能にします。 総計も計算されます。
ROLLUP
では、ROLLUP
句で指定されたグループ化リストに従って、最も詳細なレベルから総計までロールアップする小計を作成することがあります。 ROLLUP
は、引数として属性の順序付けられたリストをとり、次のように機能します:
GROUP BY
句で指定した標準集計値が計算されます。
ROLLUP
では、n+1レベルの小計が作成され、nは属性の数です。
たとえば、問合せでtime
、region
、およびdepartment
(n=3)の属性でROLLUP
を指定する場合、結果セットには4つの集計レベルの行が含まれます。
要約すると、ROLLUP
は、小計に関するタスクでの使用を目的としています。
ROLLUP構文
ROLLUP
は、次の構文を使用してGROUP BY
句に記述されます:
GROUP BY ROLLUP(attributeList)
ここで、attributeListは、単一の属性か複数の属性のカンマ区切りリストです。 属性は、単一割当て属性または複数割当て属性の場合があります。 ROLLUP
は、コレクションに対して使用できます。
ROLLUPの例
DEFINE Resellers AS SELECT DimReseller_AnnualSales AS Sales, DimGeography_CountryRegionName AS Countries, DimGeography_StateProvinceName AS States, DimReseller_OrderMonth AS OrderMonth FROM ResellerState WHERE DimReseller_OrderMonth IS NOT NULL; RETURN ResellerSales AS SELECT SUM(Sales) AS TotalSales FROM Resellers GROUP BY ROLLUP(Countries, States, OrderMonth)
部分ROLLUP
GROUP BY expr1, ROLLUP(expr2, expr3)
この場合、GROUP BY
句によって、小計が(2+1=3)レベルで作成されます。 つまり、レベル(expr1, expr2, expr3)、(expr1, expr2)および(expr1)です。
ROLLUP
のGROUP BY
句は次のようになります:
DEFINE Resellers AS SELECT ... RETURN ResellerSales AS SELECT SUM(Sales) AS TotalSales FROM Resellers GROUP BY Countries, ROLLUP(States, OrderMonth)