グルーピングの動作に関する注意

このトピックでは、EQLのグルーピング動作のうち、注意が必要なものについて説明します。

暗黙的なネストした集計

集計のネストは、EQLでは許可されません(つまり、集計関数を別の集計関数の中にネストできません)。次に示すのは、明示的にネストされた集計関数の例です。
SELECT COUNT(SUM(sales)) AS totals GROUP // Invalid

SELECT COUNT(sales) AS totals, SUM(totals) AS totals2 GROUP // Invalid
ただし、EQLでは暗黙的ARBの追加が許可されます。たとえば、次の2つの問合せは等価です。
SELECT sales AS totals GROUP // Valid implicit ARB

SELECT ARB(sales) AS sales GROUP // Valid explicit ARB
したがって、暗黙的なARBの結果が、暗黙的なネストした集計となることもあります。たとえば、次の2つの問合せは等価であり、その結果は暗黙的なネストした集計になります。
SELECT sales AS totals, COUNT(totals) AS totals2 GROUP // Invalid

SELECT ARB(sales) AS totals, COUNT(totals) AS totals2 GROUP // Invalid
選択した属性と別名を同じ名前にすると、ネストした集計がわかりにくくなることがあります。次の2つの問合せは等価であり、無効です。
SELECT sales AS sales, COUNT(sales) AS totals GROUP // Invalid

SELECT ARB(sales) AS sales, COUNT(sales) AS totals GROUP // Invalid
解決策は、次に示すように、別の別名を使用することです。これらの問合せは等価であり、有効です。
SELECT sales AS sales1, COUNT(sales) AS totals GROUP // Valid

SELECT ARB(sales) AS sales1, COUNT(sales) AS totals GROUP // Valid

GROUPINGおよびGROUPING_IDと属性ソースとの相互作用

選択した属性と別名を同じ名前にすると、属性ソースを変更できます。たとえば、次に示す問合せでは、stmt1_amountamountstmt1.amountを参照していますが、stmt2_amountamountstmt2.amountを参照しています。
SELECT stmt1 AS SELECT amount AS amount;
SELECT stmt2 AS SELECT amount+1 AS stmt1_amount, amount+2 AS amount, amount+3 AS stmt2_amount FROM stmt1
これは、GROUPING関数やGROUPING_ID関数を使用するときにも当てはまります。
SELECT stmt1 AS SELECT amount AS amount;
SELECT GROUPING(amount) AS stmt1_amount, amount AS amount,
  GROUPING(amount) AS stmt2_amount, orders AS orders,
  FROM stmt1 
  GROUP BY CUBE(amount, orders)

暗黙的な選択

暗黙的な選択は、selectリストの末尾に追加されます。たとえば、次の2つの問合せは等価です。
SELECT COUNT(sales) AS cnt GROUP BY totals, price

SELECT COUNT(sales) AS cnt, totals AS totals, price AS price GROUP BY totals, price

この影響を受けるのは、コンストラクトのうち、集計前と集計後の動作が異なるもののみです。たとえば、GROUPING関数です。