1. Czym są funkcje agregujące i jak ich używać?
Funkcje agregujące w SQL Server w odróżnieniu od pozostałych funkcji cechuje przede wszytkim to, że zwracają wynik z obliczeń pionowych wykonanych na kolumnie. Za ich pomocą możemy obliczyć przede wszystkim sumę kolumny, średnią z wartości w kolumnie, zliczyć wartości w kolumnie, obliczyć najniższą i najwyższą wartość występującą w danej kolumnie Najważniejsze funkcje agregujące MsSQL:
- AVG – średnia
- SUM – suma
- MIN – minimum
- MAX – maximum
- COUNT – licznik wartości, zwaraca wynik o typie danych int
- COUNT_BIG – licznik wartości, zwraca wynik o typie danych bigint
Poniżej najprostszy przykład wykorzystania funkcji agregującej COUNT. Wynikiem w tym wypadku będzie liczba rekordów w tabeli. Przykład wykonany na bazie AdventureWorks2016:
--tomaszkenig.pl select count(*) as COL_1 from dbo.DimEmployee a ;
Poza wyżej wymienionymi funkcjami w SQL Server mamy także do dyspozycji inne funkcje agregujące, ważne szczególnie w obliczeniach statystycznych. O tych funkcjach napiszę w rozdziale o pozostałych funkcjach agregujących. Są to m.in. wariancje, odchylenia standardowe itp.
2. Przykład wykorzystania funkcji agregujących w MsSQL
W jaki sposób policzyć sumę, średnią, minimum i maksimum? Poniżej krótki przykład na bazie AdventureWorks2016 przedstawiający najprostsze wykorzystanie funkcji agregujących.
--tomaszkenig.pl use [AdventureworksDW2016CTP3] go select SUM(a.VacationHours) as COL_1, AVG(a.VacationHours) as COL_2, MIN(a.VacationHours) as COL_3, MAX(a.VacationHours) as COL_4, COUNT(a.EmployeeKey) as COL_5 FROM dbo.DimEmployee a;
Jeśli chcesz zagregować wartości co do konkretnej kolumny, np określającej płeć, miasto itp. możesz to zrobić przy pomocy grupowania GROUP BY. Jedyne, co powinieneś zrobić to wprowadzić w klauzuli SELECT kolumnę, wg. której chcesz grupować wartości. Następnie wstaw klauzulę GROUP BY na końcu skryptu zaraz za klauzulą WHERE. Po GROUP BY wprowadzamy nazwę kolumny, wg. której chcemy grupować wartości. Możemy wprowadzić tutaj dowolną liczbę kolumn. Grupowanie omówię szczegółowo w kolejnym rozdziale kursu.
use [AdventureworksDW2016CTP3] go select a.gender, SUM(a.VacationHours) as COL_1, AVG(a.VacationHours) as COL_2, MIN(a.VacationHours) as COL_3, MAX(a.VacationHours) as COL_4, COUNT(a.EmployeeKey) as COL_5 from dbo.DimEmployee a GROUP BY a.gender;

Artykuł stanowi częśc kursu SQL Server. Jeśli masz jakieś pytania, możesz je zamieścić na forum bez logowania lub zostawić komentarz.
7 komentarzy “Funkcje agregujące w MsSQL”
W tym przykładzie jest baza danych adventureWorks2016, a cały czas pracowaliśmy na wersji z 2014 roku 🙂
wiec przykład lekko nietrafione.
Zaś ogólnie bardzo polecam ten Kurs! przerobiłem dokładnie VBA excel i teraz jestem na SQLu 🙂
Zrobiłem przykład na 2014 wersji i mi nie sortuje wartości po gender. Co jest nie tak??
use AdventureWorks2014
go
select
a.gender,
sum(a.VacationHours) as Col1,
avg(a.vacationhours) as col2,
Min(a.VacationHours) as Col3,
MAX(a.VacationHours) as Col4,
Count(a.VacationHours) as Col5
from HumanResources.Employee a
ORDER BY a.gender;
Cześć, niestety nie mam teraz dostępu do bazy ad2014, ale z tego co widzę, chodzi o grupowanie. Musimy go użyć, gdy agregujemy na podstawie kolumny:
select
a.gender,
sum(a.VacationHours) as Col1,
avg(a.vacationhours) as col2,
Min(a.VacationHours) as Col3,
MAX(a.VacationHours) as Col4,
Count(a.VacationHours) as Col5
from HumanResources.Employee a
group by A.GENDER
ORDER BY a.gender;
Dokladnie o to chodziło -> pomyliłem order by z group by
dzieki!!!
Bardzo słaby artykuł. Nic przydatnego. Żadnych konkretnych informacji, które mogą się przydać komuś kto dopiero zaczyna zabawę z SQL. Myślałem, że znajdę tu artykuł na poziomie, lecz niestety kolejny raz z kolei się zawiodłem :/
Drogi Damianie, właśnie dla początkujących jest ten artykuł.
Hej