wtorek, 28 marca 2017

Lekcja 15. Grupowanie wierszy.

Czasami chcemy pogrupować wiersze tabeli i uzyskać jakieś informacje o nich. Na przykład możemy chcieć uzyskać średnie wynagrodzenie pracowników w poszczególnych krajach.

Grupowanie wierszy za pomocą klauzuli GROUP BY
Klauzula GROUP BY grupuje wiersze w bloki ze wspólną wartością jakiejś kolumny. Na przykład poniższe zapytanie grupuje wiersze tabeli employee w bloki z tą samą wartością job_country:


Należy zauważyć, że w wynikach znajduje się tylko jeden wiersz dla każdego bloku wierszy z tą samą wartością job_country.

Używanie wielu kolumn w grupie
W klauzuli GROUP BY można określić kilka kolumn. Na przykład poniższe zapytanie zawiera w klauzuli GROUP BY  kolumny job­_grade i job_country z tabeli employee:


Używanie funkcji agregujących z grupami wierszy
Do funkcji agregującej można przesłać bloki wierszy. Wykona ona obliczenia na grupie wierszy z każdego bloku i zwróci jedną wartość dla każdego bloku. Na przykład aby uzyskać liczbę wierszy z tą samą wartością job­­­_country w tabeli employee, musimy:
  •          pogrupować wiersze w bloki z tą samą wartością job_country­ za pomocą GROUP BY
  •         zliczyć wiersze w każdej grupie za pomocą funkcji COUNT(job_country­)
Demonstruje to poniższe zapytanie:


W zestawie wyników widzimy, że w jednym wierszu job­_country ma wartość Canada, trzy wiersze mają wartość ­job­_country równą England itd.

Przejdźmy do przykładu z początku lekcji. Aby uzyskać średnie wynagrodzenie pracowników w poszczególnych krajach musimy:
  •          za pomocą klauzuli GROUP BY pogrupować wiersze z tabeli employee w bloki z tą samą wartością job_country
  •         za pomocą funkcji AVG(salary) obliczyć średnie wynagrodzenie w każdym bloku wierszy
Demonstruje to poniższe zapytanie:


Z klauzulą GROUP BY możemy używać dowolnych funkcji agregujących. Na przykład poniższe zapytanie pobiera sumę wynagrodzeń pracowników z poszczególnych krajów:


Warto zaznaczyć, że nie musimy umieszczać kolumn wykorzystywanych w klauzuli GROUP BY bezpośrednio w instrukcji SELECT. Ponadto wywołanie funkcji agregującej można również umieścić w klauzuli ORDER BY. 
Oba przypadki pokazuje poniższe zapytanie:


Brak komentarzy:

Prześlij komentarz