4.1 Gruppera kolumner

Vad som också är mycket viktigt är att om du grupperar poster kan du i avsnittet SELECTendast ange de kolumner som data grupperas efter.

Dukan inteskriv en typfråga och ange SELECTnamnkolumnen i avsnittet :

SELECT brand, name
FROM product
GROUP BY brand

Du har ett gäng rader i produkttabellen med namnfältet och det framgår inte vilken rad du behöver ersätta här. Tänk igen: du vill veta antalet produkter från varje märke och hur den resulterande tabellen kan få namnet på produkten?

Om du använder operatorn GROUP BYkan normala rader inte komma in i ditt resultat, utan endast kolumner som data grupperas efter och "beräknade kolumner", som t.ex.COUNT(*)

4.2 Gruppering efter beräknade kolumner

Men du kan gruppera efter flera kolumner och även efter beräknade kolumner. Exempel:

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

Och resultatet av denna fråga:

hyra_år total
2012 1
2013 1
2014 1
2015 2
2018 1

Låt oss analysera vår begäran.

I anställningstabellen har varje anställd ett unikt anställningsdatum, så att gruppera data efter det kommer inte att fungera - det kommer att finnas en post för varje datum och gruppering är inte så meningsfullt. Men om vi går från anställningsdatum till anställningsår, så kan det mycket väl vara en situation där företaget anställt flera anställda under samma år.

Låt oss se igen hur den här tabellen kommer att se ut innan vi grupperar:

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

Och resultatet av denna fråga:

id namn hyra_å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 denna resulterande tabell kan grupperas efter hire_year och ta reda på hur många personer som anställdes under ett visst år.

4.3 Gruppering efter flera kolumner

Låt oss nu försöka ta reda på hur många anställda vi anställde i varje månad varje år. För att göra detta behöver vi lägga till inte ett, utan två beräknade fält till frågan på en gång - anställningsåret (hyrår) och hyrmånad (hyrmånad).

Låt oss skriva en fråga så här:

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

Och resultatet av denna fråga:

id namn hyra_år hyra_månad 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 elva 2018-11-11

Om vi ​​grupperar uppgifterna i denna resultattabell efter månad, så grupperar vi helt enkelt personer i grupper, oavsett år de anställdes. Och vi behöver den resulterande tabellen ha tre kolumner: år, månad och antalet anställda.

För att göra detta, efter operatören, GROUP BYmåste du använda namnet på inte en kolumn, utan två. Exempel:

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

Och resultatet av denna fråga:

hyra_år hyra_månad total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 elva 1

Vi har få poster i tabellen, så det finns enheter överallt i totalkolumnen. Och observera förresten att ju fler kolumner vi grupperar efter, desto fler rader har vi i resultatet.