13.9 Fonctions et options à utiliser dans les clauses GROUP BY
13 Fonctions à utiliser dans les clauses SELECT et WHERE
Manuel de Référence MySQL 4.1 : Version Française
->Fonctions avec GROUP BY . Options de GROUP BY . GROUP BY avec les champs cachés
|
13.9.1 Fonctions avec GROUP BY
Si vous utilisez les fonctions de groupement avec une requête ne contenant
pas de clause
GROUP BY
, cela revient à grouper toutes les lignes.
-
AVG(expr)
-
Retourne la moyenne de l'expression
expr
:
mysql> SELECT student_name, AVG(test_score) -> FROM student -> GROUP BY student_name;
|
-
BIT_AND(expr)
-
Retourne la combinaison
AND
bit à bit de
expr
. Le calcul
est fait en précision de 64 bits (
BIGINT
).
Depuis MySQL 4.0.17, cette fonction retourne
18446744073709551615 s'il n'y avait pas de lignes.
(C'est un entier
BIGINT
non-signé, dont tous les bits sont à 1.)
Avant 4.0.17, la fonction retournait -1 s'il n'y avait pas de ligne trouvées.
-
BIT_OR(expr)
-
Retourne la combinaison
OR
bit à bit de
expr
. Le calcul
est fait en précision de 64 bits (
BIGINT
).Cette fonction retourne 0 s'il n'y a pas de ligne à traiter.
-
BIT_XOR(expr)
-
Retourne la combinaison
XOR
bit à bit de
expr
. Le calcul
est fait en précision de 64 bits (
BIGINT
).
Cette fonction retourne 0 s'il n'y a pas de ligne à traiter.
Cette fonction est disponible depuis MySQL 4.1.1.
-
COUNT(expr)
-
Retourne le nombre de valeurs non-
NULL
dans les lignes lues
par la commande
SELECT
:
mysql> SELECT student.student_name,COUNT(*) -> FROM student,course -> WHERE student.student_id=course.student_id -> GROUP BY student_name;
|
COUNT(*)
est un peu différente dans son action, car elle retourne le
nombre de lignes, même si elles contiennent
NULL
.
COUNT(*)
est optimisée pour retourner très rapidement un résultat
si
SELECT
travaille sur une table, qu'aucune autre colonne n'est lue,
et qu'il n'y a pas de clause
WHERE
.
Par exemple :
mysql> SELECT COUNT(*) FROM student;
|
Cette optimisation s'applique uniquement pour les tables
MyISAM
et
ISAM
,
car un compte exact du nombre de lignes est stocké pour ces types de tables,
et il peut être lu très rapidement. Pour les moteurs de tables transactionnels,
(
InnodB
,
BDB
), le stockage de cette valeur est plus problématique,
car plusieurs transactions peuvent survenir en même temps, et affecter toutes
ce compte.
-
COUNT(DISTINCT expr,[expr...])
-
Retourne le nombre de valeurs non-
NULL
distinctes :
mysql> SELECT COUNT(DISTINCT results) FROM student;
|
Avec MySQL, vous pouvez lire le nombre d'expression distinctes qui ne
contiennent pas
NULL
, en plaçant ici une liste d'expression.
Avec SQL-99, vous devriez faire une concaténation de toutes les expressions
dans
COUNT(DISTINCT ...)
.
-
GROUP_CONCAT(expr)
-
Syntaxe complète :
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]] [SEPARATOR str_val])
|
Cette fonction a été ajoutée en MySQL version 4.1.
Elle retourne la chaîne résultant de la concaténation de toutes les valeurs du groupe :
mysql> SELECT student_name, -> GROUP_CONCAT(test_score) -> FROM student -> GROUP BY student_name;
|
ou :
mysql> SELECT student_name, -> GROUP_CONCAT(DISTINCT test_score -> ORDER BY test_score DESC SEPARATOR " ") -> FROM student -> GROUP BY student_name;
|
Avec MySQL, vous pouvez obtenir la concaténation d'une série d'expressions.
Vous pouvez éliminer les doublons en utilisant
DISTINCT
.
Si vous voulez trier les valeurs du résultat, il faut utiliser
ORDER BY
.
Pour trier en ordre inverse, ajoutez le mot clé
DESC
(descendant) au nom
de la colonne que vous triez dans la clause
ORDER BY
. Par défaut, l'ordre
est ascendant. Cela peut être spécifié explicitement avec le mot clé
ASC
.
SEPARATOR
est une chaîne qui sera insérée entre chaque valeur du résultat.
La valeur par défaut est une virgule
'","'
. vous pouvez supprimer le séparateur
en spécifiant la chaîne vide
SEPARATOR ""
.Vous pouvez donner une taille maximale à la variable
group_concat_max_len
de votre configuration.
La syntaxe pour faire cela durant l'exécution est :
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
|
Si une taille maximale a été atteinte, le résultat
sera tronqué à cette taille maximale.
Note : il y a encore de petites limitations pour
GROUP_CONCAT()
lorsqu'il faut utiliser des valeurs
DISTINCT
avec
ORDER BY
et
et en utilisant les valeurs
BLOB
. Voyez Bugs ouverts / limitations de MySQL .
GROUP_CONCAT()
a été ajoutée en MySQL 4.1.
-
MIN(expr)
-
-
MAX(expr)
-
Retourne le minimum ou le maximum de
expr
.
MIN()
et
MAX()
peuvent prendre des chaînes comme argument : dans ce cas,
elles retournent la valeur minimale ou maximale de la valeur de la chaîne.
Comment MySQL utilise les index .
mysql> SELECT student_name, MIN(test_score), MAX(test_score) -> FROM student -> GROUP BY student_name;
|
Actuellement,
MIN()
,
MAX()
et d'autres fonctions d'agrégation
MySQL, le serveur compare les valeurs de type
ENUM
et
SET
avec leur
valeur de chaîne, et non pas leur position relative dans l'ensemble.
Ce sera corrigé.à
-
STD(expr)
-
-
STDDEV(expr)
-
Retourne la déviation standard de
expr
(la racine carrée de la
VARIANCE()
. Ceci est une extension au standard SQL 99. La forme
STDDEV()
de cette fonction est fournie pour assurer la compatibilité
Oracle.
-
SUM(expr)
-
Retourne la somme de
expr
. Notez que si le résultat ne contient
pas de ligne, cette fonction retournera
NULL
.
-
VARIANCE(expr)
-
Retourne la variance standard de l'expression
expr
(en considérant que
les lignes forment une population totale, et non pas un échantillon. Le nombre
de ligne est le dénominateur. C'est une extension à la norme
SQL-99 (disponible en version version 4.1 ou plus récent).
|