Jemand hat mir eine SQL-Abfrage gesendet, in der die GROUP BY
Klausel aus der folgenden Anweisung bestand : GROUP BY 1
.
Das muss ein Tippfehler sein, oder? Keine Spalte erhält den Alias 1. Was könnte das bedeuten? Bin ich zu Recht davon ausgegangen, dass dies ein Tippfehler sein muss?
Antworten:
Es bedeutet, nach der ersten Spalte zu gruppieren, unabhängig davon, wie sie heißt. Sie können das gleiche mit tun
ORDER BY
.quelle
In der obigen Abfrage
GROUP BY 1
bezieht sich auf das,first column in select statement
was istaccount_id
.Sie können auch in angeben
ORDER BY
.quelle
Zusätzlich zur Gruppierung nach dem Feldnamen können Sie auch nach Ordnungszahl oder Position des Felds in der Tabelle gruppieren. 1 entspricht dem ersten Feld (unabhängig vom Namen), 2 ist das zweite und so weiter.
Dies ist im Allgemeinen nicht ratsam, wenn Sie sich zu einer bestimmten Gruppe zusammenschließen, da sich die Tabellen- / Ansichtsstruktur ändern kann. Darüber hinaus kann es schwierig sein, schnell zu verstehen, was Ihre SQL-Abfrage tut, wenn Sie die Tabellenfelder nicht gespeichert haben.
Wenn Sie einen eindeutigen Satz zurückgeben oder schnell eine temporäre Suche durchführen, ist dies eine nette Kurzsyntax, um die Eingabe zu reduzieren. Wenn Sie die Abfrage irgendwann erneut ausführen möchten, würde ich empfehlen, diese zu ersetzen, um zukünftige Verwirrung und unerwartete Komplikationen (aufgrund von Schemaänderungen) zu vermeiden.
quelle
Es wird nach dem ersten Feld in der select-Klausel gruppiert
quelle
Das bedeutet, SQL-Gruppe nach 1. Spalte in Ihrer Select-Klausel. Wir verwenden dies immer
GROUP BY 1
zusammen mitORDER BY 1
. Außerdem können Sie dies auch so verwenden.GROUP BY 1,2,3..
Natürlich ist es für uns praktisch, aber Sie müssen auf diese Bedingung achten. Das Ergebnis ist möglicherweise nicht das, was Sie sind möchten, wenn jemand Ihre ausgewählten Spalten geändert hat und es nicht visualisiert wirdquelle
Es wird nach der Spaltenposition gruppiert, die Sie nach der group by-Klausel setzen.
Wenn Sie beispielsweise '
SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
' ausführen , wird es nach gruppiertSALESMAN_NAME
.Ein Risiko dabei ist, wenn Sie '
Select *
' ausführen und aus irgendeinem Grund die Tabelle mit Spalten in einer anderen Reihenfolge neu erstellen, erhalten Sie ein anderes Ergebnis als erwartet.quelle