4.1 Gruppera kolumner
Vad som också är mycket viktigt är att om du grupperar poster kan du i avsnittet SELECT
endast ange de kolumner som data grupperas efter.
Dukan inteskriv en typfråga och ange SELECT
namnkolumnen 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 BY
kan 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 BY
må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.
GO TO FULL VERSION