Blog JSystems - uwalniamy wiedzę!

Szukaj

GROUP BY, w skrócie

Zliczanie w grupach:

SELECT dzial, COUNT(*)
FROM pracownicy
GROUP BY dzial
HAVING COUNT(*) > 5;

Grupowanie polega na podzieleniu zbioru wierszy na grupy, które mają pewną wspólną cechę. Grupowania dokonuje się w celu zastosowania funkcji agregujących nie w stosunku do całego zbioru wierszy, ale do poszczególnych grup wierszy. W celu zgrupowania rekordów należy dodać nową klauzulę group by wraz z wyspecyfikowaniem kolumny lub wyrażenia, według którego mają być pogrupowane wiersze. Na liście klauzuli select mogą się znaleźć tylko kolumny i wyrażenia, według których zapytanie jest grupowane, oraz wywołania funkcji agregujących.

select count(*) IlośćWierszy, ProductCategoryID from SalesLT.Product group by ProductCategoryID;

72.jpg (771×351)

Wyświetlona została ilość wierszy , która została pogrupowana z uwzględnieniem odpowiedniego identyfikatora kategorii produktu.

Przed grupowaniem można wcześniej wyfiltrować wiersze, które nas interesują, za pomocą klauzuli where,

select count(*) IlośćWierszy, ProductCategoryID from SalesLT.Product where ProductCategoryID group by ProductCategoryID;

73.jpg (794×337)

Wyświetlona została ilość wierszy , z uwzględnieniem produktów, których identyfikator kategorii produktu  jest większy rób równy 10, a następnie dane te zostały pogrupowane na odpowiedni identyfikator kategorii produktu. 

Grupowania można używać na więcej niż jedną kolumnę lub wyrażenie. Aby tego dokonać po klauzuli group by i pierwszą nazwą kolumny lub wyrażenia, według którego mają być pogrupowane wiersze, dodajemy następną nazwę kolumny lub wyrażenia, po której w ramach grupy powstałej w wyniku pierwszego grupowania, ma nastąpić następne grupowanie. Kolejne kolumny lub wyrażenia oddzielamy przecinkiem.

select count(*) IlośćWierszy, ProductCategoryID, ProductmodelID from SalesLT.Product group by ProductCategoryID, ProductmodelID;

74.jpg (752×336)

Wyświetlona została ilość wierszy , która została pogrupowana z uwzględnieniem odpowiedniego identyfikatora kategorii produktu, a następnie w ramach tych grup, nastąpiło kolejne grupowanie z rozróżnieniem na identyfikator modelu produktu. Dokładnie widać to na wierszach numer 3 i 4.

select count(*) IlośćWierszy, ProductCategoryID, ProductmodelID from SalesLT.Product group by ProductCategoryID, ProductmodelID;

75.jpg (825×338)

Wyświetlona została ilość wierszy , która została pogrupowana z uwzględnieniem odpowiedniego identyfikatora kategorii produktu, a następnie w ramach tych grup, nastąpiło kolejne grupowanie z rozróżnieniem na identyfikator modelu produktu  a dalej wiersze zostały pogrupowane z uwzględnieniem odpowiedniego koloru.  Dokładnie widać to na wierszach numer 1 i 2.

 

Baner szkolenia Kompleksowe SQL w Microsoft SQL Server w JSystems, terminy gwarantowane

Szkolenie Kompleksowe SQL w Microsoft SQL Server →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Na czym polega grupowanie danych przez GROUP BY?
Grupowanie dzieli zbiór wierszy na grupy mające wspólną cechę, żeby zastosować funkcje agregujące nie do całego zbioru, ale do poszczególnych grup. W klauzuli GROUP BY podajemy kolumnę lub wyrażenie, według którego wiersze mają być pogrupowane.
Co może znaleźć się na liście SELECT przy grupowaniu?
Na liście SELECT mogą pojawić się tylko kolumny i wyrażenia, według których zapytanie jest grupowane, oraz wywołania funkcji agregujących. Nie można tam wstawić dowolnej kolumny spoza grupowania.
Jak grupować po więcej niż jednej kolumnie?
Po klauzuli GROUP BY podajemy pierwszą kolumnę, a następnie po przecinku kolejne. Wtedy w ramach grup powstałych z pierwszego grupowania następuje kolejne grupowanie według następnej kolumny lub wyrażenia.
Czym różni się WHERE od HAVING przy grupowaniu?
WHERE filtruje wiersze przed grupowaniem, czyli ogranicza dane wejściowe. HAVING działa po zgrupowaniu i pozwala odfiltrować całe grupy na podstawie wyniku funkcji agregującej, na przykład zostawiając tylko grupy liczące więcej niż pięć wierszy.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...