web-dev-qa-db-fra.com

Que signifie la clause SQL "GROUP BY 1"?

Quelqu'un m'a envoyé une requête SQL où le GROUP BY La clause consistait en l'affirmation suivante: GROUP BY 1.

Ce doit être une faute de frappe non? Aucune colonne ne reçoit l'alias 1. Qu'est-ce que cela pourrait signifier? Ai-je raison de supposer que cela doit être une faute de frappe?

168
Spencer

Cela signifie grouper par la première colonne, peu importe comment elle s'appelle. Vous pouvez faire la même chose avec ORDER BY.

195
Yuck
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

Dans la requête ci-dessus GROUP BY 1 se réfère à la first column in select statement lequel 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.

61
mr_eclair

En plus du regroupement par nom de champ, vous pouvez également grouper par ordinal ou par position du champ dans la table. 1 correspond au premier champ (quel que soit le nom), 2 au second, etc.

Ceci est généralement déconseillé si vous groupez 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 effectuez rapidement une recherche temporaire, utilisez la syntaxe abrégée de Nice pour réduire les saisies au clavier. Si vous envisagez de réexécuter la requête à un moment donné, je vous recommande de remplacer celles-ci pour éviter toute confusion future et complications inattendues (dues à des modifications du schéma).

22
vol7ron

Il va grouper par premier champ dans la clause select

10
Daan Geurts

Cela signifie groupe SQL par 1ère colonne dans votre clause de sélection, nous utilisons toujours ce GROUP BY 1 Avec ORDER BY 1, De plus vous pouvez aussi utiliser comme ceci GROUP BY 1,2,3.. pour nous, mais vous devez faire attention à cette condition, le résultat peut ne pas être ce que vous voulez si quelqu'un a modifié les colonnes que vous avez sélectionnées, et si ce n'est pas visualisé

4
张艳军

Il groupera par la position de colonne que vous avez placé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.

Si vous exécutez 'Select * 'et pour une raison quelconque, vous recréez la table avec des colonnes dans un ordre différent, vous obtiendrez un résultat différent de celui auquel vous vous attendiez.

4
wdoering