GROUP句およびGROUP BY句では、文の出力をグルーピングするためにソース・レコードをどのように結果レコードにマッピングするかを指定します。
その他のグルーピング関数(たとえば、MEMBERS、CUBE、GROUPING SETSなど)も、GROUP句やGROUP BY句とともに使用できます。このような関数の詳細は、この項で後述します。
GroupClause ::= 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 | GroupByMembers GroupByComposite ::= (GroupByCompositeList) GroupByCompositeList ::= GroupBySingle | GroupByCompositeList, GroupBySingle GroupByMembers ::= MEMBERS (Identifier | Identifier.Identifier) AS Indentifier 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 attributeListattributeListは、単一の属性、カンマ区切りの複数属性リスト、GROUPING SETS、CUBEまたはROLLUPです。()を指定すると、空のグループを指定したことになります。空のグループを指定すると、合計が生成されます。
グルーピングは、ソースおよびローカルで定義された属性に対して実行できます。
グルーピング属性はすべて、結果レコードに含まれます。いずれのグルーピング属性においても、NULL値(単一割当て属性用)または空のセット(複数割当て用)は、他の値と同様に扱われます。これは、ソース・レコードが結果レコードにマップされることを意味します。ただし、NULL値および空のセットをコーパスから選択した場合は無視されます(指定した状態や、AllBaseRecordsまたはNavStateRecordsから選択した場合も含みます)。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