Dela via


GRUPPERA EFTER (entitets-SQL)

Anger grupper i vilka objekt som returneras av ett frågeuttryck (SELECT) ska placeras.

Syntax

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

Argument

aliasedExpression Alla giltiga frågeuttryck som gruppering utförs på. expression kan vara en egenskap eller ett icke-aggregerat uttryck som refererar till en egenskap som returneras av FROM-satsen. Varje uttryck i en GROUP BY-sats måste utvärderas till en typ som kan jämföras för likhet. Dessa typer är vanligtvis skalära primitiver som tal, strängar och datum. Du kan inte gruppera efter en samling.

Kommentarer

Om aggregeringsfunktioner ingår i select-listan> med SELECT-satser <beräknar GROUP BY ett sammanfattningsvärde för varje grupp. När GROUP BY har angetts ska antingen varje egenskapsnamn i ett icke-aggregeringsuttryck i urvalslistan inkluderas i LISTAN GRUPP EFTER, eller så måste uttrycket GROUP BY exakt matcha listuttrycket.

Kommentar

Om ORDER BY-satsen inte har angetts är grupper som returneras av GROUP BY-satsen inte i någon viss ordning. Om du vill ange en viss ordning på data rekommenderar vi att du alltid använder ORDER BY-satsen.

När en GROUP BY-sats anges, antingen explicit eller implicit (till exempel av en HAVING-sats i frågan), döljs det aktuella omfånget och ett nytt omfång introduceras.

SELECT-satsen, HAVING-satsen och ORDER BY-satsen kan inte längre referera till elementnamn som anges i FROM-satsen. Du kan bara referera till själva grupperingsuttrycken. För att göra detta kan du tilldela nya namn (alias) till varje grupperingsuttryck. Om inget alias har angetts för ett grupperingsuttryck försöker entitets-SQL generera ett med hjälp av reglerna för aliasgenerering, enligt följande exempel.

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

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

Uttryck i GROUP BY-satsen kan inte referera till namn som definierats tidigare i samma GROUP BY-sats.

Förutom grupperingsnamn kan du även ange aggregeringar i SELECT-satsen, HAVING-satsen och ORDER BY-satsen. En aggregering innehåller ett uttryck som utvärderas för varje element i gruppen. Aggregeringsoperatorn minskar värdena för alla dessa uttryck (vanligtvis, men inte alltid, till ett enda värde). Samlingsuttrycket kan göra referenser till de ursprungliga elementnamnen som visas i det överordnade omfånget, eller till något av de nya namn som introduceras av SJÄLVA GROUP BY-satsen. Även om aggregeringarna visas i SELECT-satsen, HAVING-satsen och ORDER BY-satsen utvärderas de faktiskt under samma omfång som grupperingsuttrycken, vilket visas i följande exempel.

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

FROM orderLines as o

GROUP BY o.Product as name

Den här frågan använder GROUP BY-satsen för att skapa en rapport över kostnaden för alla beställda produkter, uppdelade efter produkt. Det ger produkten namnet name som en del av grupperingsuttrycket och refererar sedan till det namnet i SELECT-listan. Den anger också aggregeringen sum i SELECT-listan som internt refererar till orderradens pris och kvantitet.

Varje GROUP By-nyckeluttryck måste ha minst en referens till indataomfånget:

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

Ett exempel på hur du använder GROUP BY finns i HA.

Exempel

Följande SQL-entitetsfråga använder GROUP BY-operatorn för att ange grupper till vilka objekt som returneras av en fråga. Frågan baseras på AdventureWorks försäljningsmodell. Följ dessa steg för att kompilera och köra den här frågan:

  1. Följ proceduren i Så här kör du en fråga som returnerar PrimitiveType-resultat.

  2. Skicka följande fråga som ett argument till ExecutePrimitiveTypeQuery metoden:

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

Se även