指定要放置查詢 (SELECT) 表示式所傳回物件的群組。
語法
[ GROUP BY aliasedExpression [ ,...n ] ]
論點
aliasedExpression 執行群組的任何有效查詢表達式。
expression 可以是參考FROM子句所傳回之屬性的屬性或非匯總表達式。 GROUP BY 子句中的每個表達式都必須評估為可比較是否相等的類型。 這些類型通常是純量基本類型,例如數位、字串和日期。 您無法依集合分組。
備註
如果 SELECT 子句 <選取清單中>包含聚合函數,GROUP BY 會計算每個群組的摘要值。 指定 GROUP BY 時,選取清單中任何非匯總運算式中的每個屬性名稱都應該包含在 GROUP BY 清單中,或 GROUP BY 表達式必須完全符合選取清單表達式。
備註
如果未指定 ORDER BY 子句,GROUP BY 子句所傳回的群組不會依任何特定順序傳回。 若要指定數據的特定順序,建議您一律使用 ORDER BY 子句。
指定 GROUP BY 子句時,會明確或隱含地指定 (例如,查詢中的 HAVING 子句),則會隱藏目前的範圍,並引進新的範圍。
SELECT 子句、HAVING 子句和 ORDER BY 子句將無法再參考 FROM 子句中指定的項目名稱。 您只能參考群組表示式本身。 若要這樣做,您可以將新名稱(別名)指派給每個群組表達式。 如果未指定群組表達式的別名,Entity SQL 會嘗試使用別名產生規則來產生一個別名,如下列範例所示。
SELECT g1, g2, ...gn FROM c as c1
GROUP BY e1 as g1, e2 as g2, ...en as gn
GROUP BY 子句中的表達式無法參考相同 GROUP BY 子句中稍早定義的名稱。
除了分組名稱之外,您也可以在 SELECT 子句、HAVING 子句和 ORDER BY 子句中指定匯總。 匯總包含針對群組每個元素評估的表達式。 匯總運算子會減少所有這些表達式的值(通常但不一定是單一值)。 匯總表達式可以參考父範圍中可見的原始項目名稱,或是 GROUP BY 子句本身所引進的任何新名稱。 雖然匯總會出現在 SELECT 子句、HAVING 子句和 ORDER BY 子句中,但實際上會在與群組表達式相同的範圍下進行評估,如下列範例所示。
SELECT name, sum(o.Price * o.Quantity) as total
FROM orderLines as o
GROUP BY o.Product as name
此查詢會使用 GROUP BY 子句來產生所有已訂購產品成本的報告,並依產品細分。 它會提供產品的名稱 name 做為群組表達式的一部分,然後在SELECT清單中參考該名稱。 它也會指定 SELECT 清單中的匯總,該匯總 sum 會在內部參考訂單行的價格和數量。
每個 GROUP By 索引鍵表示式都必須至少有一個輸入範圍的參考:
SELECT FROM Persons as P
GROUP BY Q + P -- GOOD
GROUP BY Q -- BAD
GROUP BY 1 -- BAD, a constant is not allowed
如需使用 GROUP BY 的範例,請參閱 HAVING。
範例
下列 Entity SQL 查詢會使用 GROUP BY 運算子來指定查詢所傳回物件的群組。 查詢是以 AdventureWorks 銷售模型為基礎。 若要編譯並執行此查詢,請遵循下列步驟:
遵循 如何:執行傳回 PrimitiveType 結果的查詢中的程式。
將下列查詢當做自變數傳遞至
ExecutePrimitiveTypeQuery方法:
SELECT VALUE name FROM AdventureWorksEntities.Products
AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price