Articles

SQL GROUP BY et HAVING Clause avec des exemples

Qu’est-ce que la Clause SQL Group by?

la clause GROUP BY est une commande SQL utilisée pour regrouper les lignes ayant les mêmes valeurs. La clause GROUP BY est utilisée dans L’instruction SELECT. En option, il est utilisé conjointement avec les 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ésumant 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é.,

SQL GROUP BY Syntax

maintenant que nous savons ce qu’est la clause SQL GROUP BY, regardons la syntaxe d’une requête de base group by.

SELECT statements... GROUP BY column_name1 ;

ICI

  • « SELECT états… »est la requête de commande SQL SELECT standard.
  • « GROUPE PAR column_name1 » est la clause qui effectue le regroupement basé sur column_name1.
  • «  » est facultatif; représente d’autres noms de colonnes lorsque le regroupement est effectué sur plusieurs colonnes.
  • «  » est facultatif; il est utilisé pour restreindre les lignes affectées par la clause GROUP BY., Il est similaire à la clause WHERE.

Regroupement à l’aide d’une Seule Colonne

afin d’aider à comprendre l’effet de la clause SQL Group By, nous allons exécuter une requête simple qui renvoie tous les genre les entrées de la table des membres.

SELECT `gender` FROM `members` ;


gender

Female


Female


Male


Female


Male


Male


Male


Male


Male


Supposons que nous voulons 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 la Myflixdb nous donne les résultats suivants.,


gender

Female


Male


Notez que deux résultats ont été retournés. C’est parce que nous avons seulement deux types de sexe masculin et féminin. La clause GROUP BY dans SQL regroupait tous les membres « masculins » et ne renvoyait qu’une seule ligne. Il a fait la même chose avec les membres « féminins ».

regroupement à l’aide de plusieurs colonnes

supposons que nous voulions obtenir une liste de film category_id et les années correspondantes dans lesquelles ils ont été publiés.,

nous allons observer le résultat de cette requête simple

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 beaucoup de 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 contre myflixdb nous donne les résultats suivants 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 fonctionne à la fois sur l’id de catégorie et l’année publiée pour identifier les lignes uniques dans notre exemple ci-dessus.,

Si l’id de la catégorie est le même, mais l’année de sortie est différent, une ligne est considérée comme unique .Si l’id de catégorie et l’année de publication sont identiques pour plus d’une ligne, il est considéré comme un doublon et une seule ligne est affichée.

Regroupement et les fonctions d’agrégation

Supposons que nous voulons nombre total d’hommes et de femmes dans notre base de données. Nous pouvons utiliser le script suivant ci-dessous pour le faire.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

l’Exécution du script ci-dessus dans MySQL workbench contre la myflixdb nous donne les résultats suivants.,

gender COUNT('membership_number')
Female 3
Male 5

les résultats présentés ci-dessous sont regroupés par chaque valeur de genre unique affichée et le nombre de lignes groupées est compté à l’aide de la fonction COUNT aggregate.

restreindre les résultats de la requête en utilisant 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 limiter nos résultats à un certain critère donné. 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 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 la Myflixdb nous donne les résultats suivants indiqué 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

Remarque seuls les films avec l’ID de catégorie 8 ont été affectés par notre clause GROUP BY.

Summary

  • 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 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.
  • la Clause SQL Having 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 définis par une ou plusieurs colonnes.