4.1 Grupowanie kolumn
Bardzo ważne jest również to, że jeśli grupujesz rekordy, to w sekcji SELECT
możesz określić tylko kolumny, według których dane są grupowane.
TyNie mogęnapisz zapytanie typu i określ SELECT
kolumnę 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 BY
musisz 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.
GO TO FULL VERSION