Bis jetzt habe ich die Aggregate-Funktion gefolgt von der Group By-Klausel geschrieben, um die Werte basierend auf SUM, AVG und anderen Aggregatfunktionen zu finden. Ich habe ein wenig Verwirrung in der Group By-Klausel. Wenn wir Aggregatfunktionen verwenden, müssen die Spalten in der Klausel Gruppieren nach angegeben werden. Andernfalls gibt es eine Möglichkeit, Aggregatfunktionen zu verwenden, ohne die Group By-Klausel zu verwenden.
Alle Spalten in der SELECT-Klausel, die kein Aggregat haben, müssen in GROUP BY
stehenGut:
%Vor%Auch gut:
%Vor%Keine anderen Spalten = keine GROUP BY benötigt
%Vor%Funktioniert nicht:
%Vor%Sinnlos:
%Vor%Ein Aggregat (MAX usw.) mit anderen Spalten ohne GROUP BY hat keinen Sinn, weil die Abfrage mehrdeutig wird.
Sie können AGG () OVER () in TSQL
verwenden %Vor%Es gibt weitere Optionen für "Über" wie "Partitionieren nach", wenn Sie Folgendes gruppieren möchten:
%Vor%Sie lassen Spalten aus den SELECT-Aggregatfunktionen aus, alle anderen Spalten sollten in der durch Komma getrennten GROUP BY-Klausel vorkommen.
Sie können eine Abfrage mit Aggregaten und keiner Gruppe durchführen, solange Sie NUR Aggregatwerte in der SELECT-Anweisung haben
Die Spalten, die in der Aggregatfunktion nicht vorhanden sind, sollten auf group by-Klausel:
kommen %Vor%Dann brauchen wir keine group by-Klausel, aber wenn es eine Spalte gibt, die in der Aggregate-Funktion nicht vorhanden ist, müssen Sie für diese Spalte group by verwenden.
%Vor%Gruppe nach Spalte1, Spalte2
Dann müssen wir die Gruppe für die Spalte col1 und col2
verwendenTags und Links sql sql-server sql-server-2005 aggregate-functions group-by