Ist es möglich, die Aggregatfunktion in einem Select-Statement zu verwenden, ohne die Group By-Klausel zu verwenden?

9

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.

    
thevan 24.06.2011, 11:38
quelle

7 Antworten

18

Alle Spalten in der SELECT-Klausel, die kein Aggregat haben, müssen in GROUP BY

stehen

Gut:

%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.

    
gbn 24.06.2011, 11:41
quelle
15

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%

Ссылка

    
Anthony Sottile 24.06.2011 11:44
quelle
3

Ja, Sie können ein Aggregat ohne GROUP BY verwenden:

%Vor%

Dies gibt nur eine Zeile zurück - die Summe der Spalte "col" für alle Zeilen in tbl (ohne Nullen).

    
sqlvogel 24.06.2011 11:43
quelle
2

Sie müssen nach Spalten gruppieren, die nicht Aggregatfunktionen auf ihnen haben.

Sie können eine group by-Klausel vermeiden, wenn die ausgewählten alle Spalten Aggregatfunktionen haben.

    
Bohemian 24.06.2011 11:42
quelle
1

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

    
niktrs 24.06.2011 11:41
quelle
-1

Sicher kannst du:

%Vor%     
Akram Shahda 24.06.2011 11:42
quelle
-1

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

verwenden     
Bhawesh Deepak 24.06.2016 10:03
quelle