Reklama
Wizyt
Dzisiaj: 505Wszystkich: 541117

Grupowanie danych

Technikum » SBD » SQL » Manipulowanie danymi » Grupowanie danych

 

Funkcje agregujące


Funkcje agregujące działają na wartościach wybranego pola w grupie wierszy. Wynikiem może być suma, średnia, liczba wierszy, wybranie wartości maksymalnej lub minimalnej. Funkcje te zwracają pojedyncze wartości i są wywoływane w instrukcji SELECT. Funkcje agregujące są jednym z najważniejszych narzędzi relacyjnych baz danych.
Podstawowe funkcje agregujące to:

  • COUNT (nazwa_kolumny) — zwraca liczbę wierszy w grupie;
  • SUM (nazwa_kolumny) — zwraca sumę wartości w grupie dla wskazanej kolumny;
  • AVG (nazwa_kolumny) — zwraca średnią wartości w grupie dla wskazanej kolumny;
  • MAX (nazwa_kolumny) — zwraca największą wartość w grupie dla wskazanej kolumny;
  • MIN (nazwa_kolumny) — zwraca najmniejszą wartość w grupie dla wskazanej kolumny.


Oprócz powyższych funkcji agregujących niektóre serwery bazodanowe akceptują inne, mniej popularne funkcje.

Funkcja COUNT może zostać wywołana z symbolem * zamiast nazwy kolumny.

Przykład


W wyniku wykonania polecenia zostaną policzone wszystkie wiersze tabeli Klient, czyli otrzymamy odpowiedź na pytanie: „Ilu klientów jest zarejestrowanych w bazie danych ksiegarnia_internetowa?". W wyniku takiego wywołania funkcji COUNT() zostaną policzone także puste wiersze. Jest to jedyny przypadek, gdy funkcja agregująca uwzględnia wartość NULL.
Natomiast wywołanie tej funkcji z jawnym podaniem nazwy kolumny spowoduje pominięcie wierszy, dla których wybrana kolumna ma wartość NULL.

Przykład


Jeżeli dla niektórych klientów kolumna kod_pocztowy nie została wypełniona, zostaną oni pominięci w obliczeniach.


Przykład

 


Wynikiem będzie średnia cena książek znajdujących się w księgarni internetowej.
Jeżeli funkcja agregująca w swoich obliczeniach uwzględnia tylko wartości niepowtarzające się, to argumentem funkcji staje się słowo kluczowe DISTINCT.

Przykład

 


W wyniku otrzymamy liczbę miejscowości, z których pochodzą klienci księgarni internetowej. Słowo kluczowe DISTINCT zostało umieszczone w nawiasie ( ) jako argument funkcji COUNT( ) , ponieważ dotyczy kolumny miejscowosc, a nie tej funkcji.

Jeżeli w poleceniu dodamy klauzulę ograniczającą WHERE, to obliczenia będą dotyczyły tylko wierszy, które spełniają warunek zdefiniowany w klauzuli.


Przykład


Wynikiem będzie liczba książek wydanych po roku 2008.

Funkcje agregujące mogą być częścią wyrażeń.

Przykład

 


W wyniku otrzymamy różnicę między maksymalną i minimalną ceną książki.

 

Klauzula GROUP BY


Funkcje agregujące mają zastosowanie głównie dla danych, które zostały pogrupowane. Do grupowania wierszy służy klauzula GROUP BY.

Przykład
Mamy policzyć książki o tym samym temacie i znaleźć trzy tematy z największą liczbą książek w bazie danych.

 

 


Użycie klauzuli GROUP BY spowoduje pogrupowanie wierszy z tabeli Ksiazki według wartości w kolumnie temat. Funkcja COUNT( ) zliczy wiersze w każdej grupie, klauzula ORDER BY uporządkuje otrzymane wyniki od największej (DESC) do najmniejszej wartości w kolumnie 1, a klauzula TOP 3 ograniczy wynik zapytania do trzech pierwszych wierszy.

 

Klauzula HAVING


Klauzula HAVING jest ściśle powiązana z klauzulą GROUP BY. Określa, które wiersze zostaną zwrócone przez klauzulę GROUP BY.

Przykład
Chcemy otrzymać informację o tematach, dla których w bazie danych jest co najmniej pięć tytułów książek.

 

 

Istotne jest zrozumienie różnicy między klauzulami WHERE oraz HAVING. Klauzula WHERE filtruje wiersze przed grupowaniem i obliczeniami, tym samym określa, dla których wierszy funkcje agregujące będą wykonywały obliczenia. Klauzula HAVING wybiera wiersze już pogrupowane, po wykonaniu obliczeń przez funkcje agregujące. Klauzula WHERE nie może zawierać funkcji agregujących. Klauzula HAVING zawsze zawiera funkcje agregujące. Można użyć klauzuli HAVING bez funkcji agregujących, ale wykona ona wtedy te same działania co klauzula WHERE z tym samym warunkiem i będzie od niej mniej efektywna.
Podsumowując, klauzula WHERE pozwala filtrować wiersze, natomiast klauzula HAVING pozwala filtrować grupy zwracane przez zapytanie.


Reklama