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éation 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ésutat sera tronqué à cette
taille maximale.La fonction
GROUP_CONCAT()
est une version améliorée de la fonction
LIST()
, supportée par Sybase SQL Anywhere.
GROUP_CONCAT()
est compatible avec les fonctionnalités très limitées
de
LIST()
, si une seule colonne et aucune option ne sont spécifiées.
LIST()
a un ordre de tri par défaut.
-
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,
elels retourne 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'agregation
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)
-
Returns the standard deviation of
expr
(the square root of
VARIANCE()
. This is an extension to SQL-99. The
STDDEV()
form of this function is provided for Oracle compatibility.
-
SUM(expr)
-
Returns the sum of
expr
. Note that if the return set has no rows,
it returns 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).
|