Qu'est-ce que le groupe SQL par clause?
La clause GROUP BY est une commande SQL utilisée pour regrouper des lignes ayant les mêmes valeurs . La clause GROUP BY est utilisée dans l'instruction SELECT. En option, il est utilisé en conjonction avec des fonctions d'agrégation pour produire des rapports de synthèse à partir de la base de données.
C'est ce qu'il fait, résumer les données de la base de données.
Les requêtes qui contiennent la clause GROUP BY sont appelées requêtes groupées et ne renvoient qu'une seule ligne pour chaque élément groupé.
Syntaxe SQL GROUP BY
Maintenant que nous savons ce qu'est la clause SQL GROUP BY, examinons la syntaxe d'un groupe de base par requête.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
ICI
- «Instructions SELECT…» est la requête de commande SQL SELECT standard.
- " GROUP BY nom_colonne1" est la clause qui effectue le regroupement basé sur nom_colonne1.
- "[, nom_colonne2,…]" est facultatif; représente d'autres noms de colonnes lorsque le regroupement est effectué sur plusieurs colonnes.
- "[HAVING condition]" est facultatif; il est utilisé pour restreindre les lignes affectées par la clause GROUP BY. Elle est similaire à la clause WHERE.
Regroupement à l'aide d'une seule colonne
Afin d'aider à comprendre l'effet de la clause SQL Group By, exécutons une requête simple qui renvoie toutes les entrées de genre de la table des membres.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Supposons que nous souhaitons obtenir les valeurs uniques pour les sexes. Nous pouvons utiliser une requête suivante -
SELECT `gender` FROM `members` GROUP BY `gender`;
L'exécution du script ci-dessus dans MySQL workbench contre Myflixdb nous donne les résultats suivants.
gender |
---|
Female |
Male |
Notez que seuls deux résultats ont été renvoyés. C'est parce que nous n'avons que deux types de sexe masculin et féminin. La clause GROUP BY dans SQL a regroupé tous les membres "Mâle" ensemble et n'a renvoyé qu'une seule ligne pour celui-ci. Il a fait la même chose avec les membres "Féminins".
Regroupement à l'aide de plusieurs colonnes
Supposons que nous souhaitons obtenir une liste des films category_id et des années correspondantes au cours desquelles ils sont sortis.
Observons la sortie de cette simple requête
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Le résultat ci-dessus a de nombreux doublons.
Exécutons la même requête en utilisant group by dans SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
L'exécution du script ci-dessus dans MySQL workbench sur myflixdb nous donne les résultats suivants indiqués ci-dessous.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
La clause GROUP BY opère à la fois sur l'ID de catégorie et l'année de publication pour identifier des lignes uniques dans notre exemple ci-dessus.
Si l'ID de catégorie est le même mais que l'année de publication est différente, une ligne est traitée comme une ligne unique. est montré.
Fonctions de regroupement et d' agrégation
Supposons que nous voulions le nombre total d'hommes et de femmes dans notre base de données. Nous pouvons utiliser le script suivant ci-dessous pour ce faire.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
L'exécution du script ci-dessus dans MySQL workbench contre myflixdb nous donne les résultats suivants.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Les résultats affichés ci-dessous sont regroupés en fonction de chaque valeur de sexe unique publiée et le nombre de lignes groupées est compté à l'aide de la fonction d'agrégation COUNT.
Restriction des résultats de requête à l'aide de la clause HAVING
Ce n'est pas toujours que nous voudrons effectuer des regroupements sur toutes les données d'une table donnée. Il y aura des moments où nous voudrons restreindre nos résultats à un certain critère donné. Dans de tels cas, nous pouvons utiliser la clause HAVING
Supposons que nous voulions connaître toutes les années de sortie pour la catégorie de film id 8. Nous utiliserions le script suivant pour obtenir nos résultats.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
L'exécution du script ci-dessus dans MySQL workbench contre Myflixdb nous donne les résultats suivants indiqués ci-dessous.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Notez que seuls les films avec l'ID de catégorie 8 ont été affectés par notre clause GROUP BY.
Résumé
- La clause SQL GROUP BY est utilisée pour regrouper des lignes avec les mêmes valeurs.
- La clause GROUP BY est utilisée avec l'instruction SQL SELECT.
- L'instruction SELECT utilisée dans la clause GROUP BY ne peut être utilisée que pour contenir des noms de colonnes, des fonctions d'agrégation, des constantes et des expressions.
- SQL Have Clause est utilisé pour restreindre les résultats renvoyés par la clause GROUP BY.
- La clause MYSQL GROUP BY est utilisée pour collecter des données à partir de plusieurs enregistrements et un jeu d'enregistrements renvoyé par une ou plusieurs colonnes.