4.1 Groupement de colonnes
Ce qui est également très important, c'est que si vous regroupez des enregistrements, dans la section, SELECT
vous 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 SELECT
colonne 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 BY
vous 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.