Options de GROUP BY
<<<
GROUP BY avec les champs cachés Fonctions à utiliser dans les clauses SELECT et WHERE
>>>

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.3 GROUP BY avec les champs cachés

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)
La ligne contenant la plus grande valeur d'un certain champ par rapport à un groupe .

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();

<< GROUP BY avec les champs cachés >>
Options de GROUP BY Fonctions et options à utiliser dans les clauses GROUP BY Fonctions à utiliser dans les clauses SELECT et WHERE