| 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
  : 
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 student.student_name,COUNT(*)->        FROM student,course
 ->        WHERE student.student_id=course.student_id
 ->        GROUP BY student_name;
 | 
 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.| 
mysql> SELECT COUNT(*) FROM student;
 | 
 
COUNT(DISTINCT expr,[expr...])
      Retourne le nombre de valeurs non- 
NULL
  distinctes : 
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 ...)
 .| 
mysql> SELECT COUNT(DISTINCT results) FROM student;
 | 
 
GROUP_CONCAT(expr)
      Syntaxe complète :
 
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 :| 
GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
 [SEPARATOR str_val])
 | 
 ou :| 
mysql> SELECT student_name,->        GROUP_CONCAT(test_score)
 ->        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 :| 
mysql> SELECT student_name,->        GROUP_CONCAT(DISTINCT test_score
 ->                     ORDER BY test_score DESC SEPARATOR " ")
 ->        FROM student
 ->        GROUP BY student_name;
 | 
 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 .| 
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
 | 
 
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 . 
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é.à| 
mysql> SELECT student_name, MIN(test_score), MAX(test_score)->        FROM student
 ->        GROUP BY student_name;
 | 
     
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).
      |