Quelqu'un m'a envoyé une requête SQL où la GROUP BY
clause consistait de la déclaration: 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 ce doit être une faute de frappe?
Réponses:
Cela signifie de regrouper par la première colonne quel que soit son nom. Vous pouvez faire de même avec
ORDER BY
.la source
Dans la requête ci-dessus se
GROUP BY 1
réfère àfirst column in select statement
qui estaccount_id
.Vous pouvez également spécifier dans
ORDER BY
.la source
En plus du regroupement par nom de champ, vous pouvez également regrouper par ordinal ou position du champ dans la table. 1 correspond au premier champ (quel que soit le nom), 2 est le second, et ainsi de suite.
Ceci est généralement déconseillé si vous vous regroupez sur quelque chose de spécifique, car la structure de la table / vue peut changer. De plus, 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, il s'agit d'une syntaxe abrégée intéressante pour réduire la saisie. Si vous prévoyez d'exécuter à nouveau la requête à un moment donné, je vous recommande de les remplacer pour éviter toute confusion future et complications inattendues (en raison de changements de schéma).
la source
Il regroupera par premier champ dans la clause select
la source
Cela signifie que le groupe sql par 1ère colonne dans votre clause de sélection, nous utilisons toujours cela
GROUP BY 1
avecORDER BY 1
, en plus vous pouvez également utiliser comme çaGROUP 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 de sélection, et il n'est pas visualiséla source
Il regroupera par la position de colonne que vous mettez après la clause group by.
par exemple, si vous exécutez '
SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
', il sera regroupé parSALESMAN_NAME
.Si vous exécutez `
Select *
` et pour une raison quelconque, vous recréez la table avec des colonnes dans un ordre différent, cela vous donnera un résultat différent de celui auquel vous vous attendez.la source