GROUP句およびGROUP BY句では、文の出力をグルーピングするためにソース・レコードをどのように結果レコードにマッピングするかを指定します。
その他のグルーピング関数(たとえば、CUBEやGROUPING SETS)も、GROUP句やGROUP BY句とともに使用できます。このような関数の詳細は、この章で後述します。
GroupByList ::= GROUP | GROUP BY GroupByList_ | GROUP BY GroupAll GroupByList_ ::= GroupByElement | GroupByList_ , GroupByElement GroupByElement ::= GroupBySingle | GroupingSets | CubeRollup GroupingSets ::= GROUPING SETS (GroupingSetList) GroupingSetList ::= GroupingSetElement | GroupingSetList , GroupingSetElement GroupingSetElement ::= GroupBySingle | GroupByComposite | CubeRollup | GroupAll CubeRollup ::= {CUBE | ROLLUP} (CubeRollupList) CubeRollupList ::= CubeRollupElement | CubeRollupList , CubeRollupElement CubeRollupElement ::= GroupBySingle | GroupByComposite GroupBySingle ::= Identifier GroupByComposite ::= (GroupByCompositeList) GroupByCompositeList ::= GroupBySingle | GroupByCompositeList, GroupBySingle GroupAll ::= ()
GROUP = GROUP BY() = GROUP BY GROUPING SETS(())
GROUP句を使用すると、結果を集計して1つのバケットを作成できます。BNF文法が示すように、GROUP句は引数を取りません。
RETURN ReviewCount AS SELECT SUM(NumReviews) AS NumberOfReviews GROUP
この文が返すのは、NumberOfReviewsのレコード1つです。値は、NumReviews属性の値の合計です。
GROUP BY(attributeList)attributeListは、単一の属性、カンマ区切りの複数属性リスト、GROUPING SETS、CUBEまたはROLLUPです。()を指定すると、空のグループを指定したことになります。空のグループを指定すると、合計が生成されます。
グルーピングは、ソースおよびローカルで定義された属性に対して実行できます。
グルーピング属性はすべて、結果レコードに含まれます。グルーピング属性のNULL値は、他の値と同様に扱われます。つまり、ソース・レコードは結果レコードにマッピングされます。(ただし、コーパスから選択する場合はNULL値は無視されます。)EQLでのユーザー定義のNULL値の扱いの詳細は、COALESCEを参照してください。
{ TransId, ProductType, Amount, Year, Quarter, Region, SalesRep, Customer }
{ TransId = 1, ProductType = "Widget", Amount = 100.00, Year = 2011, Quarter = "11Q1", Region = "East", SalesRep = "J. Smith", Customer = "Customer1" }
DEFINE RegionsByYear AS GROUP BY Region, Yearこの結果は、{ Region, Year }という形式の集計です。次に例を示します。
{ "East", "2010" } { "West", "2011" } { "East", "2011" }
RETURN Results AS SELECT SUM(PROMO_COST) AS PR_Cost GROUP BY PROMO_NAME RETURN Results AS SELECT SUM(PROMO_COST) AS PR_Cost GROUP BY PROMO_NAME, PROMO_NAME
GROUP BYのキーは、SELECT式の出力であってもかまいません。ただし、その式自体に集計関数が含まれていないことが条件です。
SELECT COALESCE(Person, 'Unknown Person') AS Person2, ... GROUP BY Person2
SELECT SUM(Sales) AS Sales2, ... GROUP BY Sales2
各管理対象属性の指定した深さでグルーピングできます。ただし、GROUP BY文ではANCESTOR関数は使用できません(EQLでは式のグルーピングができないからです)。したがって、最初にANCESTORをSELECT文とともに使用してから、別名を付けた結果をGROUP BY句の中で指定します。
SELECT ANCESTOR("Region", 1) AS StateInfo ... GROUP BY StateInfo
これが発生する可能性があるのはコーパス・ソースに対してのみです。結果レコードは常に単一割当てであるからです。
RETURN "Example" AS SELECT AVG("Gross") AS "AvgGross", SUM("Gross") AS "TotalGross" GROUP BY UserTag
結果バケットのセットを定義するには、文でGROUP BY属性のセットを指定する必要があります。これらのグルーピング属性のすべての値のクロス積によって、候補バケットのセットが定義されます。
結果には空ではないバケットのみが含まれるように、自動的に切り捨てられます。
属性参照が出現するのが、GROUP句の中ではなく、属性定義の中でGROUP句を持つ文である場合は、その属性には暗黙的にARB集計が適用されます。