Tutoriel MySQL Aggregate Functions: SUM, AVG, MAX, MIN, COUNT, DISTINCT

Anonim

Les fonctions d'agrégation concernent

  • Effectuer des calculs sur plusieurs lignes
  • D'une seule colonne d'un tableau
  • Et renvoyer une seule valeur.

La norme ISO définit cinq (5) fonctions d'agrégation à savoir;

1) COUNT

2) SOMME
3) MOY
4) MIN
5) MAX

Pourquoi utiliser des fonctions d'agrégation.

D'un point de vue commercial, les différents niveaux d'organisation ont des exigences d'informations différentes. Les gestionnaires de haut niveau sont généralement intéressés à connaître des chiffres entiers et pas nécessairement les détails individuels.

> Les fonctions d'agrégation nous permettent de produire facilement des données résumées à partir de notre base de données.

Par exemple, à partir de notre base de données myflix, la direction peut nécessiter les rapports suivants

  • Films les moins loués.
  • Les films les plus loués.
  • Nombre moyen de location de chaque film en un mois.

Nous produisons facilement les rapports ci-dessus en utilisant des fonctions d'agrégation.

Examinons en détail les fonctions d'agrégation.

Fonction COUNT

La fonction COUNT renvoie le nombre total de valeurs dans le champ spécifié. Il fonctionne à la fois sur les types de données numériques et non numériques. Toutes les fonctions d'agrégation par défaut excluent les valeurs nulles avant de travailler sur les données.

COUNT (*) est une implémentation spéciale de la fonction COUNT qui renvoie le nombre de toutes les lignes d'une table spécifiée. COUNT (*) considère également les valeurs nulles et les doublons.

Le tableau ci-dessous montre les données du tableau movierentals

numéro de réference Date de la transaction date de retour numéro de membre movie_id movie_ est retourné
11 20-06-2012 NUL 1 1 0
12 22-06-2012 25-06-2012 1 2 0
13 22-06-2012 25-06-2012 3 2 0
14 21-06-2012 24-06-2012 2 2 0
15 23-06-2012 NUL 3 3 0

Supposons que nous voulions obtenir le nombre de fois que le film avec l'ID 2 a été loué

SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;

L'exécution de la requête ci-dessus dans MySQL workbench contre myflixdb nous donne les résultats suivants.

 
COUNT('movie_id')
3

Mot-clé DISTINCT

Le mot-clé DISTINCT qui nous permet d'omettre les doublons de nos résultats. Ceci est réalisé en regroupant des valeurs similaires.

Pour apprécier le concept de Distinct, exécutons une requête simple

SELECT `movie_id` FROM `movierentals`;
 
movie_id
1
2
2
2
3

Maintenant, exécutons la même requête avec le mot-clé distinct -

SELECT DISTINCT `movie_id` FROM `movierentals`;

Comme indiqué ci-dessous, distinct omet les enregistrements en double des résultats.

 
movie_id
1
2
3

Fonction MIN

La fonction MIN renvoie la plus petite valeur du champ de table spécifié .

À titre d'exemple, supposons que nous voulions connaître l'année de sortie du film le plus ancien de notre bibliothèque, nous pouvons utiliser la fonction MIN de MySQL pour obtenir les informations souhaitées.

La requête suivante nous aide à y parvenir

SELECT MIN(`year_released`) FROM `movies`;

L'exécution de la requête ci-dessus dans MySQL workbench contre myflixdb nous donne les résultats suivants.

 
MIN('year_released')
2005

Fonction MAX

Comme son nom l'indique, la fonction MAX est l'opposé de la fonction MIN. Il renvoie la plus grande valeur du champ de table spécifié .

Supposons que nous voulons obtenir l'année de sortie du dernier film de notre base de données. Nous pouvons facilement utiliser la fonction MAX pour y parvenir.

L'exemple suivant renvoie la dernière année de cinéma publiée.

SELECT MAX(`year_released`) FROM `movies`;

L'exécution de la requête ci-dessus dans MySQL workbench à l'aide de myflixdb nous donne les résultats suivants.

 
MAX('year_released')
2012

Fonction SUM

Supposons que nous voulions un rapport indiquant le montant total des paiements effectués jusqu'à présent. Nous pouvons utiliser la fonction MySQL SUM qui renvoie la somme de toutes les valeurs de la colonne spécifiée . SUM fonctionne uniquement sur les champs numériques . Les valeurs nulles sont exclues du résultat renvoyé.

Le tableau suivant présente les données du tableau des paiements.

payment_ id numéro de membre date de paiement la description le montant payé numéro_de_référence_ externe
1 1 23-07-2012 Paiement de la location du film 2500 11
2 1 25-07-2012 Paiement de la location du film 2000 12
3 3 30-07-2012 Paiement de la location du film 6000 NUL

La requête ci-dessous récupère tous les paiements effectués et les additionne pour renvoyer un seul résultat.

SELECT SUM(`amount_paid`) FROM `payments`;

L'exécution de la requête ci-dessus dans MySQL workbench sur myflixdb donne les résultats suivants.

 
SUM('amount_paid')
10500

Fonction AVG

La fonction MySQL AVG renvoie la moyenne des valeurs dans une colonne spécifiée . Tout comme la fonction SOMME, elle ne fonctionne que sur les types de données numériques .

Supposons que nous voulions trouver le montant moyen payé. Nous pouvons utiliser la requête suivante -

SELECT AVG(`amount_paid`) FROM `payments`;

L'exécution de la requête ci-dessus dans MySQL workbench, nous donne les résultats suivants.

 
AVG('amount_paid')
3500

Résumé

  • MySQL prend en charge les cinq (5) fonctions d'agrégation standard ISO COUNT, SUM, AVG, MIN et MAX.
  • Les fonctions SUM et AVG ne fonctionnent que sur les données numériques.
  • Si vous souhaitez exclure les valeurs en double des résultats de la fonction d'agrégation, utilisez le mot clé DISTINCT. Le mot-clé ALL inclut même les doublons. Si rien n'est spécifié, ALL est supposé être la valeur par défaut.
  • Les fonctions d'agrégation peuvent être utilisées conjointement avec d'autres clauses SQL telles que GROUP BY

Casse-tête

Vous pensez que les fonctions d'agrégation sont faciles. Essaye ça!

L'exemple suivant regroupe les membres par nom, compte le nombre total de paiements, le montant moyen des paiements et le total général des montants des paiements.

SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;

L'exécution de l'exemple ci-dessus dans MySQL workbench nous donne les résultats suivants.