Quelqu'un m'a envoyé une requête SQL dans laquelle le paramètre GROUP BY
La clause consistait en une déclaration : GROUP BY 1
.
Ce doit être une faute de frappe, non ? Aucune colonne ne porte l'alias 1. Qu'est-ce que cela peut signifier ? Ai-je raison de penser qu'il s'agit d'une erreur de frappe ?
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.