Delen via


GROUP BY (Entiteit SQL)

Hiermee geeft u groepen op waarin objecten die worden geretourneerd door een queryexpressie (SELECT) moeten worden geplaatst.

Syntaxis

[ GROUP BY aliasedExpression [ ,...n ] ]

Argumenten

aliasedExpression Elke geldige query-expressie waarop groepering wordt uitgevoerd. expression kan een eigenschap of een niet-geaggregeerde expressie zijn die verwijst naar een eigenschap die wordt geretourneerd door de FROM-component. Elke expressie in een GROUP BY-component moet een type evalueren dat kan worden vergeleken voor gelijkheid. Deze typen zijn over het algemeen scalaire primitieven, zoals getallen, tekenreeksen en datums. U kunt niet groeperen op een verzameling.

Opmerkingen

Als statistische functies zijn opgenomen in de selectlijst> van select-componenten<, berekent GROUP BY een samenvattingswaarde voor elke groep. Wanneer GROUP BY is opgegeven, moet elke eigenschapsnaam in een niet-geaggregeerde expressie in de selectielijst worden opgenomen in de lijst GROUP BY of moet de GROUP BY-expressie exact overeenkomen met de expressie voor de geselecteerde lijst.

Notitie

Als de ORDER BY-component niet is opgegeven, zijn groepen die worden geretourneerd door de GROUP BY-component, niet in een bepaalde volgorde. Als u een bepaalde volgorde van de gegevens wilt opgeven, wordt u aangeraden altijd de ORDER BY-component te gebruiken.

Wanneer een GROUP BY-component wordt opgegeven, expliciet of impliciet (bijvoorbeeld door een HAVING-component in de query), wordt het huidige bereik verborgen en wordt er een nieuw bereik geïntroduceerd.

De SELECT-component, de HAVING-component en de ORDER BY-component kunnen niet langer verwijzen naar elementnamen die zijn opgegeven in de FROM-component. U kunt alleen verwijzen naar de groeperingsexpressies zelf. Hiervoor kunt u nieuwe namen (aliassen) toewijzen aan elke groeperingsexpressie. Als er geen alias is opgegeven voor een groeperingsexpressie, probeert Entity SQL er een te genereren met behulp van de regels voor het genereren van aliassen, zoals wordt geïllustreerd in het volgende voorbeeld.

SELECT g1, g2, ...gn FROM c as c1

GROUP BY e1 as g1, e2 as g2, ...en as gn

Expressies in de GROUP BY-component kunnen niet verwijzen naar namen die eerder in dezelfde GROUP BY-component zijn gedefinieerd.

Naast groeperingsnamen kunt u ook aggregaties opgeven in de SELECT-component, DE HAVING-component en de ORDER BY-component. Een aggregatie bevat een expressie die wordt geëvalueerd voor elk element van de groep. De aggregatieoperator vermindert de waarden van al deze expressies (meestal, maar niet altijd, in één waarde). Met de samenvoegingsexpressie kunnen verwijzingen worden gemaakt naar de oorspronkelijke elementnamen die zichtbaar zijn in het bovenliggende bereik of naar een van de nieuwe namen die door de GROUP BY-component zelf zijn geïntroduceerd. Hoewel de aggregaties worden weergegeven in de SELECT-component, HAVING-component en ORDER BY-component, worden ze daadwerkelijk geëvalueerd onder hetzelfde bereik als de groeperingsexpressies, zoals geïllustreerd in het volgende voorbeeld.

SELECT name, sum(o.Price * o.Quantity) as total

FROM orderLines as o

GROUP BY o.Product as name

Deze query maakt gebruik van de GROUP BY-component om een rapport te maken van de kosten van alle bestelde producten, onderverdeeld per product. Het geeft de naam name aan het product als onderdeel van de groeperingsexpressie en verwijst vervolgens naar die naam in de SELECT-lijst. Ook wordt de statistische functie sum opgegeven in de SELECT-lijst die intern verwijst naar de prijs en hoeveelheid van de orderregel.

Elke GROUP By-sleutelexpressie moet ten minste één verwijzing hebben naar het invoerbereik:

SELECT FROM Persons as P
GROUP BY Q + P   -- GOOD
GROUP BY Q   -- BAD
GROUP BY 1   -- BAD, a constant is not allowed

Zie HAVING voor een voorbeeld van het gebruik van GROUP BY.

Opmerking

De volgende Entiteit SQL-query maakt gebruik van de OPERATOR GROUP BY om groepen op te geven waarin objecten worden geretourneerd door een query. De query is gebaseerd op het AdventureWorks Sales Model. Voer de volgende stappen uit om deze query te compileren en uit te voeren:

  1. Volg de procedure in Procedure: Voer een query uit die PrimitieveType-resultaten retourneert.

  2. Geef de volgende query als argument door aan de ExecutePrimitiveTypeQuery methode:

SELECT VALUE name FROM AdventureWorksEntities.Products 
    AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price

Zie ook