CUBE拡張

CUBEは、指定された属性セットから、考えられるすべての組合せについて小計を作成します。

1つのCUBEに対してn個の属性が指定された場合に、返される小計の組合せの数は2のn乗になります。

CUBEは(ROLLUPと同様に)、GROUPING SETSの糖衣構文です。
CUBE(a, b, c) = GROUPING SETS((a,b,c), (a,b), (a,c), (b,c), (a), (b), (c), ())

CUBEの構文

CUBEGROUP BY句の中に出現し、次の構文が使用されます。
GROUP BY CUBE(attributeList)
attributeListは単一属性か、カンマ区切りの複数属性リストです。
注意: CUBEは、コーパスでは使用できません。

CUBEの例

この例はROLLUPの例によく似ていますが、CUBEを使用する点のみが異なります。
DEFINE Resellers AS SELECT
  DimReseller_AnnualSales AS Sales,
  DimGeography_CountryRegionName AS Countries,
  DimGeography_StateProvinceName AS States,
  DimReseller_OrderMonth AS OrderMonth
WHERE DimReseller_OrderMonth IS NOT NULL;

RETURN ResellerSales AS
SELECT SUM(Sales) AS TotalSales
FROM Resellers
GROUP BY CUBE(Countries, States, OrderMonth)

部分的CUBE

部分的CUBEは、部分的ROLLUPによく似ています。特定の属性のみに制限でき、その前にCUBE演算子には含まれない属性を指定できるからです。この場合は、キューブ・リスト(カッコで囲まれている)で指定された属性に限定して、すべての考えられる組合せの小計が計算され、その小計はGROUP BYリストの中の先行するアイテムと結合されます。

部分的CUBEの構文は次のとおりです。
GROUP BY expr1, CUBE(expr2, expr3)
この構文の例では、2^2 (つまり4)個の小計が計算されます。
  • (expr1, expr2, expr3)
  • (expr1, expr2)
  • (expr1, expr3)
  • (expr1)
前述の例を使用すると、部分的CUBEGROUP BY句は次のようになります。
DEFINE Resellers AS SELECT
  ...
RETURN ResellerSales AS
SELECT SUM(Sales) AS TotalSales
FROM Resellers
GROUP BY Countries, CUBE(States, OrderMonth)