4.1 Kolommen groeperen
Wat ook erg belangrijk is, is dat als u records groepeert, u in de sectie SELECT
alleen de kolommen kunt opgeven waarop de gegevens worden gegroepeerd.
Jijkan nietschrijf een typequery en specificeer de naamkolomSELECT
in de sectie :
SELECT brand, name
FROM product
GROUP BY brand
Je hebt een aantal rijen in de producttabel met het naamveld , en het is niet duidelijk welke rij je hier moet vervangen. Denk nog eens na: u wilt het aantal producten van elk merk weten en hoe de resulterende tabel de naam van het product kan krijgen?
Als u de operator gebruikt GROUP BY
, kunnen normale rijen niet in uw resultaat komen, maar alleen kolommen waarop gegevens zijn gegroepeerd en "berekende kolommen", zoalsCOUNT(*)
4.2 Groeperen op berekende kolommen
Maar u kunt groeperen op meerdere kolommen en zelfs op berekende kolommen. Voorbeeld:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
En het resultaat van deze vraag:
huur_jaar | totaal |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Laten we ons verzoek analyseren.
In de werknemerstabel heeft elke werknemer een unieke aanwervingsdatum, dus het groeperen van gegevens op deze zal niet werken - er zal één record zijn voor elke datum en groeperen heeft weinig zin. Maar als we van de datum van indiensttreding naar het jaar van indiensttreding gaan, kan het heel goed zijn dat het bedrijf in hetzelfde jaar meerdere werknemers in dienst heeft genomen.
Laten we nog eens kijken hoe deze tabel eruit zal zien voordat we gaan groeperen:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
En het resultaat van deze vraag:
ID kaart | naam | huur_jaar | join_date |
---|---|---|---|
1 | Ivanov Ivan | 2012 | 2012-06-30 |
2 | Petrov Petr | 2013 | 2013-08-12 |
3 | Ivanov Sergej | 2014 | 01-01-2014 |
4 | Rabinovich Moisha | 2015 | 2015-05-12 |
5 | Kirienko Anastasia | 2015 | 2015-10-10 |
6 | Vaska | 2018 | 2018-11-11 |
Maar deze resulterende tabel kan worden gegroepeerd op huur_jaar en ontdek hoeveel mensen er in een bepaald jaar zijn aangenomen.
4.3 Groeperen op meerdere kolommen
Laten we nu eens kijken hoeveel werknemers we elke maand van elk jaar hebben aangenomen. Om dit te doen, moeten we niet één, maar twee berekende velden tegelijk aan de query toevoegen: het jaar van aanwerving (hire_year) en de maand van aanwerving (hire_month).
Laten we een query als deze schrijven:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
En het resultaat van deze vraag:
ID kaart | naam | huur_jaar | huur_maand | join_date |
---|---|---|---|---|
1 | Ivanov Ivan | 2012 | 6 | 2012-06-30 |
2 | Petrov Petr | 2013 | 8 | 2013-08-12 |
3 | Ivanov Sergej | 2014 | 1 | 01-01-2014 |
4 | Rabinovich Moisha | 2015 | 5 | 2015-05-12 |
5 | Kirienko Anastasia | 2015 | 10 | 2015-10-10 |
6 | Vaska | 2018 | elf | 2018-11-11 |
Als we de gegevens in deze resultatentabel per maand groeperen, groeperen we mensen gewoon in groepen, ongeacht het jaar waarin ze zijn aangenomen. En we hebben de resulterende tabel nodig met drie kolommen: jaar, maand en het aantal ingehuurde werknemers.
Om dit te doen, GROUP BY
moet u na de operator de naam van niet één kolom gebruiken, maar twee. Voorbeeld:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
En het resultaat van deze vraag:
huur_jaar | huur_maand | totaal |
---|---|---|
2012 | 6 | 1 |
2013 | 8 | 1 |
2014 | 1 | 1 |
2015 | 5 | 1 |
2015 | 10 | 1 |
2018 | elf | 1 |
We hebben weinig records in de tabel, dus er zijn overal eenheden in de totaalkolom. Merk trouwens op dat hoe meer kolommen we groeperen, hoe meer rijen we in het resultaat hebben.
GO TO FULL VERSION