4.1 Gruppering av kolonner
Det som også er veldig viktig er at hvis du grupperer poster, kan du i seksjonen SELECT
bare spesifisere kolonnene som dataene er gruppert etter.
Dukan ikkeskriv en typespørring og spesifiser SELECT
navnekolonnen 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 BY
må 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.