Que signifie la clause SQL «GROUP BY 1»?

Quelqu’un m’a envoyé une requête SQL où la clause GROUP BY consistait en l’instruction: GROUP BY 1 .

Ce doit être une faute de frappe non? On ne donne pas de colonne à l’alias 1. Qu’est-ce que cela pourrait signifier? Ai-je raison de supposer que ce doit être une faute de frappe?

Cela signifie regrouper par la première colonne indépendamment de ce qu’elle appelle. Vous pouvez faire la même chose avec ORDER BY .

 SELECT account_id, open_emp_id ^^^^ ^^^^ 1 2 FROM account GROUP BY 1; 

Dans la requête ci-dessus, GROUP BY 1 fait référence à la first column in select statement qui est account_id .

Vous pouvez également spécifier dans ORDER BY .

Remarque: Le nombre dans ORDER BY et GROUP BY commence toujours par 1 et non par 0.

En plus du regroupement par nom de champ, vous pouvez également regrouper par ordinal ou positionner le champ.

Cela est généralement déconseillé si vous regroupez sur quelque chose de spécifique, car la structure de la table / vue peut changer; en outre, il est plus difficile à lire (crédit: beurk ). Cependant, si vous retournez un ensemble unique de quelque chose, alors ça va.

Il regroupera par premier champ dans la clause select

Il regroupera par la position de colonne que vous placez 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 .

Si vous exécutez ‘ Select * ‘ et que vous recréez la table avec des colonnes dans un ordre différent, cela vous donnera un résultat différent de celui attendu.

Cela signifie que sql group par 1ère colonne dans votre clause select, nous utilisons toujours GROUP BY 1 avec ORDER BY 1 , sans compter que vous pouvez aussi utiliser comme GROUP BY 1,2,3.. , bien sûr, cela nous convient, mais vous devez faire attention à cette condition le résultat peut ne pas être ce que vous voulez si quelqu’un a modifié vos colonnes sélectionnées, et ce n’est pas visualisé