Clause SQL GROUP BY et HAVING avec exemples

Qu'est-ce que la clause SQL Group by ?

La clause GROUP BY est une commande SQL utilisée pour regrouper les lignes qui ont les mêmes valeurs. La clause GROUP BY est utilisée dans l'instruction SELECT. En option, il est utilisé conjointement avec des fonctions d'agrégation pour produire des rapports récapitulatifs à partir de la base de données.

C'est ce que ça 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'une requête group by de base.

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];

ICI

  • « Instructions SELECT… » est la requête de commande SQL SELECT standard.
  • "PAR GROUPE nom_colonne1» est la clause qui effectue le regroupement en fonction de column_name1.
  • « [,column_name2,…] » 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. C'est semblable au clause O.

Regroupement à l'aide d'un Colonne unique

Afin de mieux comprendre l'effet de la clause SQL Group By, exécutons une requête simple qui renvoie toutes les entrées de sexe de la table des membres.

SELECT `gender` FROM `members` ;
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Supposons que nous souhaitions obtenir les valeurs uniques pour les genres. Nous pouvons utiliser une requête suivante –

SELECT `gender` FROM `members` GROUP BY `gender`;

Exécuter le script ci-dessus dans MySQL établi 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 genre, masculin et féminin. La clause GROUP BY dans SQL regroupait tous les membres « mâles » et ne renvoyait qu'une seule ligne pour cela. Il a fait la même chose avec les membres « féminins ».

Regroupement à l'aide plusieurs colonnes

Supposons que nous souhaitions obtenir une liste des filmscategory_id et des années correspondantes au cours desquelles ils sont sortis.

Observons le résultat 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 comporte 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`;

Exécuter le script ci-dessus dans MySQL L'établi contre 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'identifiant de catégorie et l'année de publication pour identifier au design lignes dans notre exemple ci-dessus.

Si l'identifiant de catégorie est le même mais que l'année de sortie est différente, alors une ligne est traitée comme une ligne unique. Si l'identifiant de catégorie et l'année de sortie sont les mêmes pour plusieurs lignes, alors elle est considérée comme un doublon et une seule ligne. est montré.

Regroupement et fonctions d'agrégation

Supposons que nous souhaitions 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`;

Exécuter le script ci-dessus dans MySQL Le 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.

Restreindre les résultats d'une requête à l'aide de AYANT qui les aurait exempté de leurs obligations si des circonstances hors de leur contrôle les empêchaient de produire le grain sous contrat.

Nous ne souhaitons pas toujours effectuer des regroupements sur toutes les données d'un tableau donné. Il y aura des moments où nous souhaiterons limiter nos résultats à certains critères donnés. Dans de tels cas, nous pouvons utiliser la clause HAVING

Supposons que nous souhaitions connaître toutes les années de sortie pour la catégorie de film 8. Nous utiliserions le script suivant pour obtenir nos résultats.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Exécuter le script ci-dessus dans MySQL L'établi contre Myflixdb nous donne les résultats suivants présenté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'identifiant de catégorie 8 ont été concernés par notre clause GROUP BY.

Résumé

  • La clause GROUP BY SQL est utilisée pour regrouper les lignes avec les mêmes valeurs.
  • La clause GROUP BY est utilisée avec le Instruction SQL SELECT.
  • L'instruction SELECT utilisée dans la clause GROUP BY ne peut contenir que des noms de colonnes, des fonctions d'agrégation, des constantes et des expressions.
  • La clause SQL Have est utilisée 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 des enregistrements renvoyés par une ou plusieurs colonnes.