Pokazywanie postów oznaczonych etykietą Grupowanie wierszy. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Grupowanie wierszy. Pokaż wszystkie posty

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: