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