303 votes

Que signifie la clause SQL "GROUP BY 1" ?

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.

4voto

wdoering Points 300

Il regroupera les données en fonction de la position de la colonne que vous avez indiquée après la clause "group by".

par exemple, si vous exécutez ' SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1 ' il sera groupé par SALESMAN_NAME .

Le risque est que si vous utilisez ' Select * et que, pour une raison quelconque, vous recréez le tableau avec des colonnes dans un ordre différent, vous obtiendrez un résultat différent de celui auquel vous vous attendiez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X