Clause SQL GROUP BY et HAVING avec exemples

Table des matières:

Anonim

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.