MySQL a étendu l'utilisation de la clause GROUP
BY
. Vous pouvez utiliser des colonnes ou des calculs
de l'expression SELECT
qui n'apparaissent pas
dans la clause GROUP BY
. Cela se dit
n'import quelle valeur pour ce groupe. Vous
pouvez utiliser cela pour améliorer les performances en
évitant les tris ou les regroupements inutiles de valeurs. Par
exemple, vous n'avez pas besoin de faire un regroupement par nom
de client customer.name
dans la requête
suivante :
mysql>SELECT order.custid,customer.name,MAX(payments)
->FROM order,customer
->WHERE order.custid = customer.custid
->GROUP BY order.custid;
En SQL standard, vous devriez ajouter la colonne
customer.name
à la clause GROUP
BY
. Avec MySQL, ce nom est redondant si vous
n'utilisez pas le mode ANSI.
N'utilisez pas cette fonctionnalité si les
colonnes que vous omettez dans la clause GROUP
BY
ne sont pas unique dans le groupe!! Vous auriez des
résultats inattendus!
Dans certains cas, vous pouvez utiliser MIN()
et MAX()
pour obtenir une valeur spécifique
d'une colonne, même si cette valeur n'est pas unique. L'exemple
suivant donne la valeur de la colonne column
issue de la ligne contenant la plus petit valeur de la colonne
sort
:
SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
Notez que si vous utilisez MySQL version 3.22 ou plus ancien, ou
si vous essayez de suivre la norme SQL-99, vous ne pouvez pas
utiliser les expressions dans GROUP BY
ou
ORDER BY
. Vous pouvez contourner cette
limitation en utilisant un alias pour l'expression :
mysql>SELECT id,FLOOR(value/100) AS val FROM tbl_name
->GROUP BY id,val ORDER BY val;
En MySQL version 3.23, vous pouvez faire :
mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.