CodeGym /Kursy /All lectures for PL purposes /Grupowanie według wielu kolumn

Grupowanie według wielu kolumn

All lectures for PL purposes
Poziom 1, Lekcja 241
Dostępny

4.1 Grupowanie kolumn

Bardzo ważne jest również to, że jeśli grupujesz rekordy, to w sekcji SELECTmożesz określić tylko kolumny, według których dane są grupowane.

TyNie mogęnapisz zapytanie typu i określ SELECTkolumnę name w sekcji :

SELECT brand, name
FROM product
GROUP BY brand

Masz kilka wierszy w tabeli produktów z polem nazwa i nie jest jasne, który wiersz należy tutaj zastąpić. Pomyśl jeszcze raz: chcesz poznać liczbę produktów każdej marki i jak wynikowa tabela może uzyskać nazwę produktu?

Jeśli użyjesz operatora GROUP BY, wtedy normalne wiersze nie mogą dostać się do twojego wyniku, a jedynie kolumny, według których dane są grupowane i „kolumny obliczeniowe”, takie jakCOUNT(*)

4.2 Grupowanie według kolumn obliczeniowych

Ale możesz grupować według wielu kolumn, a nawet według kolumn obliczeniowych. Przykład:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

I wynik tego zapytania:

rok_wynajmu całkowity
2012 1
2013 1
2014 1
2015 2
2018 1

Przeanalizujmy naszą prośbę.

W tabeli pracowników każdy pracownik ma unikalną datę zatrudnienia, więc grupowanie danych według niej nie zadziała - będzie jeden rekord dla każdej daty i grupowanie nie będzie miało większego sensu. Ale jeśli przejdziemy od daty zatrudnienia do roku zatrudnienia, to równie dobrze może to być sytuacja, w której firma zatrudniła kilku pracowników w tym samym roku.

Zobaczmy jeszcze raz, jak ta tabela będzie wyglądać przed grupowaniem:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

I wynik tego zapytania:

ID nazwa rok_wynajmu data_dołączenia
1 Iwanow Iwan 2012 2012-06-30
2 Pietrow Pietr 2013 2013-08-12
3 Iwanow Siergiej 2014 2014-01-01
4 Rabinowicz Mojsza 2015 2015-05-12
5 Kirienko Anastazja 2015 2015-10-10
6 Vaska 2018 2018-11-11

Ale wynikową tabelę można pogrupować według roku zatrudnienia i dowiedzieć się, ile osób zostało zatrudnionych w danym roku.

4.3 Grupowanie według wielu kolumn

Teraz spróbujmy dowiedzieć się, ilu pracowników zatrudnialiśmy w każdym miesiącu każdego roku. Aby to zrobić, musimy dodać jednocześnie do zapytania nie jedno, a dwa pola obliczeniowe - rok zatrudnienia (rok_zatrudnienia) oraz miesiąc zatrudnienia (miesiąc_zatrudnienia).

Napiszmy takie zapytanie:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

I wynik tego zapytania:

ID nazwa rok_wynajmu miesiąc_wynajmu data_dołączenia
1 Iwanow Iwan 2012 6 2012-06-30
2 Pietrow Pietr 2013 8 2013-08-12
3 Iwanow Siergiej 2014 1 2014-01-01
4 Rabinowicz Mojsza 2015 5 2015-05-12
5 Kirienko Anastazja 2015 10 2015-10-10
6 Vaska 2018 jedenaście 2018-11-11

Jeśli pogrupujemy dane w tej tabeli wyników według miesięcy, po prostu pogrupujemy ludzi w grupy, niezależnie od roku, w którym zostali zatrudnieni. I potrzebujemy, aby wynikowa tabela miała trzy kolumny: rok, miesiąc i liczbę zatrudnionych pracowników.

Aby to zrobić, po operatorze GROUP BYmusisz użyć nazwy nie jednej kolumny, ale dwóch. Przykład:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

I wynik tego zapytania:

rok_wynajmu miesiąc_wynajmu całkowity
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 jedenaście 1

Mamy niewiele rekordów w tabeli, więc w kolumnie sumy są wszędzie jednostki. A tak przy okazji, zauważ, że im więcej kolumn pogrupujemy, tym więcej wierszy otrzymamy w wyniku.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION