Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Meghatározza, hogy a lekérdezési (SELECT) kifejezés által visszaadott objektumok mely csoportokba kerüljenek.
Szemantika
[ GROUP BY aliasedExpression [ ,...n ] ]
Érvek
aliasedExpression Bármely érvényes lekérdezési kifejezés, amelyen a csoportosítás történik.
expression Lehet tulajdonság vagy nem összesítő kifejezés, amely a FROM záradék által visszaadott tulajdonságra hivatkozik. A GROUP BY záradék minden kifejezésének egyenlőség szempontjából összehasonlítható típusra kell kiértékelnie. Ezek a típusok általában skaláris primitívek, például számok, sztringek és dátumok. Gyűjtemény szerint nem csoportosítható.
Megjegyzések
Ha az összesítő függvények szerepelnek a SELECT záradék <kiválasztási listájában>, a GROUP BY minden csoporthoz kiszámít egy összegző értéket. A GROUP BY megadásakor a kijelölési listában szereplő nem összesítő kifejezések mindegyik tulajdonságának szerepelnie kell a GROUP BY listában, vagy a GROUP BY kifejezésnek pontosan meg kell egyeznie a kijelölési listakifejezéssel.
Megjegyzés:
Ha az ORDER BY záradék nincs megadva, a GROUP BY záradék által visszaadott csoportok nem egy adott sorrendben vannak. Az adatok meghatározott sorrendjének megadásához javasoljuk, hogy mindig az ORDER BY záradékot használja.
Ha a GROUP BY záradék explicit vagy implicit módon van megadva (például egy HAVING záradékkal a lekérdezésben), az aktuális hatókör rejtett lesz, és új hatókört vezet be.
A SELECT záradék, a HAVING záradék és az ORDER BY záradék többé nem hivatkozhat a FROM záradékban megadott elemnevekre. Csak a csoportosítási kifejezésekre hivatkozhat. Ehhez minden csoportosítási kifejezéshez új neveket (aliasokat) rendelhet. Ha nincs megadva alias egy csoportosítási kifejezéshez, az Entity SQL az aliasgenerálási szabályokkal próbál létrehozni egyet, ahogyan az az alábbi példában is látható.
SELECT g1, g2, ...gn FROM c as c1
GROUP BY e1 as g1, e2 as g2, ...en as gn
A GROUP BY záradék kifejezései nem hivatkozhatnak az ugyanazon GROUP BY záradékban korábban definiált nevekre.
A csoportosítási nevek mellett a SELECT záradékban, a HAVING záradékban és az ORDER BY záradékban is megadhat összesítéseket. Az összesítés a csoport minden eleméhez kiértékelt kifejezést tartalmaz. Az összesítő operátor az összes kifejezés értékét (általában, de nem mindig) egyetlen értékre csökkenti. Az összesítő kifejezés a szülőhatókörben láthatóvá teheti az eredeti elemnevekre vagy a GROUP BY záradék által bevezetett új nevekre mutató hivatkozásokat. Bár az összesítések megjelennek a SELECT záradékban, a HAVING záradékban és az ORDER BY záradékban, azok kiértékelése a csoportosítási kifejezésekkel azonos hatókörben történik, ahogyan az az alábbi példában is látható.
SELECT name, sum(o.Price * o.Quantity) as total
FROM orderLines as o
GROUP BY o.Product as name
Ez a lekérdezés a GROUP BY záradék használatával készít jelentést az összes megrendelt termék költségéről termék szerint lebontva. A csoportosítási kifejezés részeként megadja a termék nevét name , majd a SELECT listában erre a névre hivatkozik. A SELECT listában szereplő összesítést sum is megadja, amely belsőleg hivatkozik a rendeléssor árára és mennyiségére.
Minden CSOPORT kulcskifejezésnek legalább egy hivatkozással kell rendelkeznie a bemeneti hatókörre:
SELECT FROM Persons as P
GROUP BY Q + P -- GOOD
GROUP BY Q -- BAD
GROUP BY 1 -- BAD, a constant is not allowed
A GROUP BY használatára példa: HAVING.
példa
Az alábbi Entity SQL-lekérdezés a GROUP BY operátorral adja meg azokat a csoportokat, amelyekbe a lekérdezés visszaadja az objektumokat. A lekérdezés az AdventureWorks értékesítési modellen alapul. A lekérdezés fordításához és futtatásához kövesse az alábbi lépéseket:
Kövesse a How to: Execute a Query that Returns PrimitiveType Results (Primitívtípus-eredményeket visszaadó lekérdezés végrehajtása) című témakör lépéseit.
Adja át a következő lekérdezést argumentumként a
ExecutePrimitiveTypeQuerymetódusnak:
SELECT VALUE name FROM AdventureWorksEntities.Products
AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price