Rozbudujmy trochę nasze zapytanie z rozdziału o funkcjach agregujących. Do tej pory wynikiem powyższych operacji był jeden rekord. Chcemy jednak, by np nasza tabela pokazała nam te same statystyki, ale np zagregowane do co do koloru w kolumnie kolor. Korzystamy w tym celu z klauzuli GROUP BY. Dopisujemy ją na końcu naszego zapytania. W klauzuli SELECT wpisujemy kolumnę color, w klauzuli GROUP BY także:
use AdventureWorks2014; select color, sum(listprice) as suma, --suma cen avg(listprice) as avg1, -- średnia cena min(listprice) as min1, -- najmniejsza cena max(listprice) as max1, --największa cena count(listprice) as count1, --liczba rekordów niepustych count(1) as count2, count(color) as count3, min(color) as min2, max(color) as max2 from Production.Product group by Color go
Wynikiem powyższego zapytania będą rekordy zagregowane do kolumny kolor. Agregację można wykonywać dla dowolnej liczby kolumn jednocześnie. Jeśli chcemy wykluczyć niektóre rekordy przed wykonaniem naszych funkcji korzystamy z klauzuli WHERE. Jeśli jednak chcemy wykluczyć jakieś rekordy już z wyniku grupowania korzystamy w tym celu z klauzuli HAVING. Poniżej zastosowanie.
use AdventureWorks2014; select color, sum(listprice) as suma, --suma cen avg(listprice) as avg1, -- średnia cena min(listprice) as min1, -- najmniejsza cena max(listprice) as max1, --największa cena count(listprice) as count1, --liczba rekordów niepustych count(1) as count2, count(color) as count3, min(color) as min2, max(color) as max2 from Production.Product where color in ('Black','Blue','Yellow') --bierzemy tylko te kolory przed wykonaniem grupowania group by Color having count(listprice) > 30 -- bierzemy rekordy o liczbie więszej niż 30 dla danego koloru po wykonaniu grupowania ; go