4.1 Groupement de colonnes

Ce qui est également très important, c'est que si vous regroupez des enregistrements, dans la section, SELECTvous ne pouvez spécifier que les colonnes par lesquelles les données sont regroupées.

Toine peut pasécrivez une requête de type et spécifiez la SELECTcolonne name dans la section :

SELECT brand, name
FROM product
GROUP BY brand

Vous avez un tas de lignes dans la table product avec le champ name , et il n'est pas clair quelle ligne vous devez remplacer ici. Détrompez-vous : vous voulez connaître le nombre de produits de chaque marque et comment le tableau résultant peut obtenir le nom du produit ?

Si vous utilisez l'opérateur GROUP BY, les lignes normales ne peuvent pas entrer dans votre résultat, mais uniquement les colonnes par lesquelles les données sont regroupées et les "colonnes calculées", telles queCOUNT(*)

4.2 Regroupement par colonnes calculées

Mais vous pouvez grouper par plusieurs colonnes et même par colonnes calculées. Exemple:

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

Et le résultat de cette requête :

location_année total
2012 1
2013 1
2014 1
2015 2
2018 1

Analysons notre demande.

Dans la table des employés , chaque employé a une date d'embauche unique, donc le regroupement des données ne fonctionnera pas - il y aura un enregistrement pour chaque date et le regroupement n'aura pas beaucoup de sens. Mais si on passe de la date d'embauche à l'année d'embauche, alors il peut bien s'agir d'une situation où l'entreprise a embauché plusieurs employés la même année.

Voyons à nouveau à quoi ressemblera ce tableau avant de regrouper :

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

Et le résultat de cette requête :

identifiant nom location_année join_date
1 Ivanov Ivan 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Ivanov Sergueï 2014 2014-01-01
4 Rabinovitch Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Mais ce tableau résultant peut être regroupé par embauche_année et savoir combien de personnes ont été embauchées au cours d'une année particulière.

4.3 Regroupement par plusieurs colonnes

Essayons maintenant de savoir combien d'employés nous avons embauchés chaque mois de chaque année. Pour ce faire, nous devons ajouter non pas un, mais deux champs calculés à la requête à la fois - l'année d'embauche (hire_year) et le mois d'embauche (hire_month).

Écrivons une requête comme celle-ci :

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

Et le résultat de cette requête :

identifiant nom location_année embauche_mois join_date
1 Ivanov Ivan 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Sergueï 2014 1 2014-01-01
4 Rabinovitch Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 dix 2015-10-10
6 Vaska 2018 onze 2018-11-11

Si nous regroupons les données de ce tableau de résultats par mois, nous regroupons simplement les personnes en groupes, quelle que soit l'année de leur embauche. Et nous avons besoin que le tableau résultant ait trois colonnes : année, mois et nombre d'employés embauchés.

Pour ce faire, après l'opérateur, GROUP BYvous devez utiliser le nom non pas d'une colonne, mais de deux. Exemple:

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

Et le résultat de cette requête :

location_année embauche_mois total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 dix 1
2018 onze 1

Nous avons peu d'enregistrements dans le tableau, il y a donc des unités partout dans la colonne des totaux. Et au fait, notez que plus nous regroupons de colonnes, plus nous avons de lignes dans le résultat.