Wir können ein einfaches Beispiel nehmen.
Stellen Sie sich eine Tabelle TableA
mit den folgenden Werten vor:
id firstname lastname Mark
-------------------------------------------------------------------
1 arun prasanth 40
2 ann antony 45
3 sruthy abc 41
6 new abc 47
1 arun prasanth 45
1 arun prasanth 49
2 ann antony 49
GROUP BY
Die SQL GROUP BY-Klausel kann in einer SELECT-Anweisung verwendet werden, um Daten über mehrere Datensätze hinweg zu sammeln und die Ergebnisse nach einer oder mehreren Spalten zu gruppieren.
In einfacheren Worten wird die Anweisung GROUP BY in Verbindung mit den Aggregatfunktionen verwendet, um die Ergebnismenge nach einer oder mehreren Spalten zu gruppieren.
Syntax:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;
Wir können uns GROUP BY
in unserer Tabelle bewerben :
select SUM(Mark)marksum,firstname from TableA
group by id,firstName
Ergebnisse:
marksum firstname
----------------
94 ann
134 arun
47 new
41 sruthy
In unserer realen Tabelle haben wir 7 Zeilen und wenn wir uns bewerben GROUP BY id
, gruppiert der Server die Ergebnisse basierend auf id
:
In einfachen Worten:
Hier wird GROUP BY
normalerweise die Anzahl der zurückgegebenen Zeilen reduziert, indem sie aufgerollt und Sum()
für jede Zeile berechnet werden.
PARTITION BY
Bevor wir zu PARTITION BY gehen, schauen wir uns die OVER
Klausel an:
Gemäß der MSDN-Definition:
Die OVER-Klausel definiert ein Fenster oder eine benutzerdefinierte Reihe von Zeilen innerhalb einer Abfrageergebnismenge. Eine Fensterfunktion berechnet dann einen Wert für jede Zeile im Fenster. Sie können die OVER-Klausel mit Funktionen verwenden, um aggregierte Werte wie gleitende Durchschnitte, kumulative Aggregate, laufende Summen oder ein Top-N pro Gruppenergebnis zu berechnen.
PARTITION BY reduziert nicht die Anzahl der zurückgegebenen Zeilen.
Wir können PARTITION BY in unserer Beispieltabelle anwenden:
SELECT SUM(Mark) OVER (PARTITION BY id) AS marksum, firstname FROM TableA
Ergebnis:
marksum firstname
-------------------
134 arun
134 arun
134 arun
94 ann
94 ann
41 sruthy
47 new
Schauen Sie sich die Ergebnisse an - im Gegensatz zu GROUP BY werden die Zeilen partitioniert und alle Zeilen zurückgegeben.