4.1 Gruparea coloanelor
Ceea ce este, de asemenea, foarte important este că dacă grupați înregistrări, atunci în secțiune SELECT
puteți specifica doar coloanele după care sunt grupate datele.
Tunu potiscrieți o interogare de tip și specificați SELECT
coloana 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 BY
trebuie 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.