Grupowanie danych: Funkcje grupujące w SQL cz. I
Funkcje grupujące to bardzo ważny element w różnego rodzaju rozbudowanych kwerendach pobierających dane z bazy. Dzięki nim możemy wykonywać różne operacje na zbiorach (wierszach) otrzymując tym samym dokładnie spersonalizowane na nasze potrzeby dane.
Grupowanie danych w SQL polega na łączeniu ze sobą kilku wierszy w jeden. Jednym z najprostszych przykładów na grupowanie danych jest właśnie zgrupowanie całej tabeli czyli połączenie wszystkich jej wierszy w jeden.
W SQL mamy dostępną całą gamę funkcji grupujących są to między innymi:
avg()
,count()
,sum()
,min()
,max()
,stdev()
,stdevp()
.
Na osobny temat zasługuje klauzula GROUP BY
, którą opisałem w drugiej części tego artykułu.
AVG()
Funkcja avg()
zwraca średnią wartość liczb grupy bądź tabeli z danej kolumny podanej jako argument.
Przykład:
SELECT AVG(wiek) FROM tab1;
Uwaga: Funkcja ta przyjmuje tylko liczby, bądź kolumny z „liczbowym” typem danych.
COUNT()
Funkcja count()
jak wskazuje jej nazwa zwraca liczbę całkowitą przekazanych w postaci argumentu wartości. Funkcje tą najczęściej wykorzystuje się do sprawdzania liczby wierszy w danej grupie.
Przykładowe zapytanie zliczające liczbę wierszy w tabeli tab1
:
SELECT COUNT(*) FROM tab1;
lub:
SELECT COUNT(kolID) FROM tab1;
Można również wyeliminować zliczanie powtarzających się danych za pośrednictwem słowa kluczowego DISTINCT:
SELECT COUNT(DISTINCT id) FROM tab1;
Oczywiście należy pamiętać, że symbolu „*” nie można poprzedzić słowem kluczowym DISTINCT
gdyż funkcja COUNT()
wywołana dla argumentu „*” zwraca liczbę wszystkich wierszy grupy bądź tabeli również z tymi pustymi i powtórzonymi.
SUM()
Funkcja sum()
zwraca sumę podanych wartości:
SELECT SUM(klienci) FROM tab1;
MIN()
Funkcja min()
jak sama nazwa wskazuje zwraca najmniejszą wartość. Jako argument może przyjmować dane typu „liczbowego”, daty i czasu, a nawet tekstowe. Ważne jest to, że ciąg znaków porównywany jest alfabetycznie.
Przykład:
SELECT MIN(wiek) FROM tab1;
MAX()
Funkcja max()
jak sama nazwa wskazuje zwraca największą wartość. Jako argument może przyjmować dane typu „liczbowego”, daty i czasu, a nawet tekstowe. Ważne jest to, że ciąg znaków porównywany jest alfabetycznie.
Przykład:
SELECT MAX(wiek) FROM tab1;
STDEV()
stdev()
zwraca odchylenie standardowe podanych jako argument wartości liczbowych.
Przykład:
SELECT STDEV(ceny) FROM tab1;
STDEVP()
stedevp()
zwraca odchylenie standardowe próbki podanej jako argument:
Przykład:
SELECT STDEVP(ceny) FROM tab1;
A jeżeli chcę sumę, ale muszę dodać inne rekordy do komendy ? Np. Select (tutaj coś jest), (I tutaj też jest jakiś rekord) SUM(Tutaj jest to co sumuje)
From (jakiś zbiór)
Where (To coś)=(To inne coś)
To czy taka składnia zadziała ?
Hej Michał,
Kwerenda którą podałeś raczej nie zadziała. Jeśli sumujesz kolumnę i dodatkowo pobierasz inne kolumny, musisz zrobić grupowanie – bo jak ma zadziałać suma? Suma policzy się dla każdego rekordu, a jej składnikami będą wszystkie rekordy jakie zostały zgrupowane dla tego jednego.
Przykładowo: SELECT lastName, SUM(age) FROM users GROUP BY lastname – taka kwerenda zgrupuje ludzi o tym samym nazwisku, a następnie zsumuje ich wiek. Dla każdego nazwiska będzie suma wieku wszystkich użytkowników (o tym nazwisku), którzy reprezentowani są w tym jednym rekordzie.