4.1 Gruparea coloanelor

Ceea ce este, de asemenea, foarte important este că dacă grupați înregistrări, atunci în secțiune SELECTputeți specifica doar coloanele după care sunt grupate datele.

Tunu potiscrieți o interogare de tip și specificați SELECTcoloana de nume în secțiunea :

SELECT brand, name
FROM product
GROUP BY brand

Aveți o grămadă de rânduri în tabelul de produse cu câmpul de nume și nu este clar ce rând trebuie să înlocuiți aici. Gândește-te din nou: vrei să știi numărul de produse ale fiecărei mărci și cum poate obține numele produsului în tabelul rezultat?

Dacă utilizați operatorul GROUP BY, atunci rândurile normale nu pot intra în rezultat, ci numai coloanele după care datele sunt grupate și „coloane calculate”, cum ar fiCOUNT(*)

4.2 Gruparea după coloane calculate

Dar puteți grupa după mai multe coloane și chiar după coloane calculate. Exemplu:

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

Și rezultatul acestei interogări:

angajare_an total
2012 1
2013 1
2014 1
2015 2
2018 1

Să analizăm cererea noastră.

În tabelul de angajați , fiecare angajat are o dată unică de angajare, astfel încât gruparea datelor după aceasta nu va funcționa - va exista o înregistrare pentru fiecare dată și gruparea nu va avea prea mult sens. Dar dacă trecem de la data angajării la anul de angajare, atunci poate fi o situație în care compania a angajat mai mulți angajați în același an.

Să vedem din nou cum va arăta acest tabel înainte de grupare:

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

Și rezultatul acestei interogări:

id Nume angajare_an Data înscrierii
1 Ivanov Ivan 2012 30-06-2012
2 Petrov Petr 2013 12-08-2013
3 Ivanov Serghei 2014 01-01-2014
4 Rabinovici Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Dar acest tabel rezultat poate fi grupat după angajare_an și aflați câți oameni au fost angajați într-un anumit an.

4.3 Gruparea pe mai multe coloane

Acum să încercăm să aflăm câți angajați am angajat în fiecare lună a fiecărui an. Pentru a face acest lucru, trebuie să adăugăm nu unul, ci două câmpuri calculate la interogare simultan - anul de închiriere (anchiriere_an) și luna angajării (lună_închiriere).

Să scriem o interogare ca aceasta:

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

Și rezultatul acestei interogări:

id Nume angajare_an angajare_lună Data înscrierii
1 Ivanov Ivan 2012 6 30-06-2012
2 Petrov Petr 2013 8 12-08-2013
3 Ivanov Serghei 2014 1 01-01-2014
4 Rabinovici Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vaska 2018 unsprezece 2018-11-11

Dacă grupăm datele din acest tabel de rezultate pe lună, atunci pur și simplu grupăm oamenii în grupuri, indiferent de anul în care au fost angajați. Și avem nevoie ca tabelul rezultat să aibă trei coloane: anul, luna și numărul de angajați angajați.

Pentru a face acest lucru, după operator, GROUP BYtrebuie să utilizați numele nu a unei coloane, ci a două. Exemplu:

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

Și rezultatul acestei interogări:

angajare_an angajare_lună total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 unsprezece 1

Avem puține înregistrări în tabel, așa că există unități peste tot în coloana totală. Și apropo, rețineți că cu cât grupăm mai multe coloane, cu atât avem mai multe rânduri în rezultat.