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.