4.1 Gruppering av kolonner

Det som også er veldig viktig er at hvis du grupperer poster, kan du i seksjonen SELECTbare spesifisere kolonnene som dataene er gruppert etter.

Dukan ikkeskriv en typespørring og spesifiser SELECTnavnekolonnen i seksjonen :

SELECT brand, name
FROM product
GROUP BY brand

Du har en haug med rader i produkttabellen med navnefeltet , og det er ikke klart hvilken rad du må erstatte her. Tenk om igjen: du vil vite antall produkter fra hvert merke og hvordan den resulterende tabellen kan få navnet på produktet?

Hvis du bruker operatoren GROUP BY, kan ikke vanlige rader komme inn i resultatet, men bare kolonner som data grupperes etter og "kalkulerte kolonner", som f.eks.COUNT(*)

4.2 Gruppering etter beregnede kolonner

Men du kan gruppere etter flere kolonner og til og med etter beregnede kolonner. Eksempel:

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

Og resultatet av denne spørringen:

ansettelsesår Total
2012 1
2013 1
2014 1
2015 2
2018 1

La oss analysere forespørselen vår.

I ansatttabellen har hver ansatt en unik ansettelsesdato, så gruppering av data etter den vil ikke fungere - det vil være én post for hver dato og gruppering vil ikke gi mye mening. Men går vi fra ansettelsesdato til ansettelsesår, så kan det godt være en situasjon hvor bedriften ansatte flere ansatte i samme år.

La oss se igjen hvordan denne tabellen vil se ut før gruppering:

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

Og resultatet av denne spørringen:

id Navn ansettelsesår join_date
1 Ivanov Ivan 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Ivanov Sergey 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Men denne resulterende tabellen kan grupperes etter hire_year og finne ut hvor mange personer som ble ansatt i et bestemt år.

4.3 Gruppering etter flere kolonner

La oss nå prøve å finne ut hvor mange ansatte vi ansatte i hver måned hvert år. For å gjøre dette, må vi ikke legge til ett, men to beregnede felt i spørringen samtidig - leieåret (leie_år) og leiemåneden (leie_måned).

La oss skrive et spørsmål som dette:

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

Og resultatet av denne spørringen:

id Navn ansettelsesår leie_måned join_date
1 Ivanov Ivan 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Sergey 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vaska 2018 elleve 2018-11-11

Hvis vi grupperer dataene i denne resultattabellen etter måned, så grupperer vi ganske enkelt folk i grupper, uavhengig av året de ble ansatt. Og vi trenger at den resulterende tabellen har tre kolonner: år, måned og antall ansatte.

For å gjøre dette, etter operatøren, GROUP BYmå du bruke navnet på ikke en kolonne, men to. Eksempel:

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

Og resultatet av denne spørringen:

ansettelsesår leie_måned Total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 elleve 1

Vi har få poster i tabellen, så det er enheter overalt i totalkolonnen. Og forresten, merk at jo flere kolonner vi grupperer etter, jo flere rader har vi i resultatet.