Outre le regroupement par le nom du champ, vous pouvez également regrouper par ordre ordinal, c'est-à-dire par la position du champ dans la table. 1 correspond au premier champ (quel que soit son nom), 2 est le deuxième, et ainsi de suite.
C'est généralement déconseillé si vous effectuez un regroupement sur quelque chose de spécifique, car la structure de la table/vue peut changer. En outre, il peut être difficile de comprendre rapidement ce que fait votre requête SQL si vous n'avez pas mémorisé les champs de la table.
Si vous renvoyez un ensemble unique, ou si vous effectuez rapidement une recherche temporaire, il s'agit d'une syntaxe abrégée qui permet de réduire la saisie. Si vous prévoyez de réexécuter la requête à un moment donné, je vous recommande de remplacer ces éléments pour éviter toute confusion future et toute complication inattendue (due à des changements de schéma).
9 votes
Ce n'est pas une faute de frappe, c'est la première colonne de votre ensemble de résultats.
10 votes
Notez que cette syntaxe n'est pas portable. Elle se comportera différemment sur des bases de données autres que mysql. Dans Oracle, par exemple, elle est traitée comme une constante.
2 votes
@RussellReed Oui. Malheureusement (car l'utilisation d'un alias est parfois très utile), ansi sql ne permet pas le regroupement par colonne ordinale. La raison est que le group by se fait avant la projection. Mais alors que faire quand on a des expressions de regroupement avec des dizaines de lignes on se retrouve avec . mutiples de dizaines de lignes dans l'instruction sql finale.