Verwenden von Gruppieren nach für mehrere Spalten

1036

Ich verstehe den Punkt von GROUP BY x

Aber wie funktioniert GROUP BY x, yund was bedeutet das?

l - '' '' '-' '' '' '' '' '' '' '
quelle
2
Sie werden es nicht beschrieben finden, da diese Frage es aufwirft. Die GROUP BY-Klausel kann ein oder mehrere Felder enthalten. GRUPPE NACH Kunden; GROUP BY Nachname, Vorname; GRUPPE NACH Jahr, Geschäft, Sku usw.
Bill

Antworten:

2028

Group By Xbedeutet , alle diejenigen mit dem gleichen Wert für X in eine Gruppe zu setzen .

Group By X, Ybedeutet , alle diejenigen mit den gleichen Werten für X und Y in eine Gruppe einzuteilen .

Nehmen wir zur Veranschaulichung anhand eines Beispiels an, wir haben die folgende Tabelle, die damit zu tun hat, wer welches Fach an einer Universität besucht:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Wenn Sie eine group bySpalte nur für das Thema verwenden; sagen:

select Subject, Count(*)
from Subject_Selection
group by Subject

Sie erhalten so etwas wie:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... weil es 5 Einträge für ITB001 und 2 für MKB114 gibt

Wenn wir zu group byzwei Spalten wären:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

wir würden das bekommen:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Wenn wir nach zwei Spalten gruppieren, heißt es: " Gruppieren Sie sie so, dass sich alle mit demselben Fach und Semester in derselben Gruppe befinden, und berechnen Sie dann alle Aggregatfunktionen (Anzahl, Summe, Durchschnitt usw.). ) für jede dieser Gruppen " . In diesem Beispiel wird dies durch die Tatsache demonstriert, dass, wenn wir sie zählen, drei Personen ITB001 in Semester 1 und zwei Personen in Semester 2 ausführen. Beide Personen, die MKB114 ausführen, befinden sich in Semester 1, also gibt es keine Zeile für Semester 2 (keine Daten passen in die Gruppe "MKB114, Semester 2")

Hoffentlich macht das Sinn.

Smashery
quelle
11
@Smashery: Bedeutet das also auch, dass GROUP BY A,Bdas dasselbe ist wie GROUP BY B,A?
Tumchaaditya
23
Ja tut es. Ich kann nicht mit Sicherheit sagen, ob sie so effizient sind wie die anderen, aber sie werden das gleiche Ergebnis liefern, ja.
Smashery
2
Darf hier hinzugefügt werden, dass es einen Unterschied zwischen GROUP BY a, bund gibt, GROUP BY a AND bda der zweite nur gruppierte Elemente mit genau dem gleichen Inhalt und ohne "Untergruppen" auflistet. In diesem Fall wäre die Ausgabe dieselbe wie die erste.
Dwza
5
Ich möchte hinzufügen, dass die Reihenfolge, in der Sie nach den Spalten gruppieren, keine Rolle spielt. In der obigen Beispielgruppe nach Semester hätte das Fach das gleiche Ergebnis
geliefert
2
Nun, Gruppe nach a, b und Gruppe nach b, a geben NICHT das gleiche Ergebnis zurück - die Zeilen werden in einer anderen Reihenfolge angezeigt
Fanny
33

Die GROUP BYKlausel wird in Verbindung mit den Aggregatfunktionen verwendet, um die Ergebnismenge nach einer oder mehreren Spalten zu gruppieren. z.B:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Denken Sie an diese Reihenfolge:

1) SELECT (wird verwendet, um Daten aus einer Datenbank auszuwählen)

2) FROM (Klausel wird verwendet, um die Tabellen aufzulisten)

3) WHERE (Klausel wird zum Filtern von Datensätzen verwendet)

4) 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)

5) HAVING (Klausel wird in Kombination mit der GROUP BY-Klausel verwendet, um die Gruppen der zurückgegebenen Zeilen auf diejenigen zu beschränken, deren Bedingung TRUE ist)

6) ORDER BY (Schlüsselwort wird verwendet, um die Ergebnismenge zu sortieren)

Sie können alle diese Funktionen verwenden, wenn Sie Aggregatfunktionen verwenden. In dieser Reihenfolge müssen sie festgelegt werden, da sonst eine Fehlermeldung angezeigt werden kann.

Aggregatfunktionen sind:

MIN gibt den kleinsten Wert in einer bestimmten Spalte zurück

SUM gibt die Summe der numerischen Werte in einer bestimmten Spalte zurück

AVG gibt den Durchschnittswert einer bestimmten Spalte zurück

COUNT gibt die Gesamtzahl der Werte in einer bestimmten Spalte zurück

COUNT (*) gibt die Anzahl der Zeilen in einer Tabelle zurück

S. Mayol
quelle
1
aber wo setzen wir die 2 Spalten, wie basierend auf 2 / mehr Spalten zu aggregieren ist die Frage
Chaitanya Bapat
Hallo Chaitanya, ich weiß nicht, ob Sie das fragen, aber ich möchte Ihnen nur einige Beispiele geben. Wenn Sie eine Produkttabelle haben, verwenden Sie Aggregatfunktionen auf diese Weise. Im Folgenden sind zwei Szenarien aufgeführt: SELECT AVG (instock) FROM products; Dadurch werden die durchschnittlichen Lagerbestände der Produkttabelle berechnet. Wenn Sie nun Lagerbestände nach Produktkategorie berechnen möchten, müssen Sie die AVG-Funktion mit der folgenden GROUP BY-Klausel verwenden: SELECT categoryId, AVG (instock) FROM products GROUP BY categoryId;
S. Mayol
Dies beantwortet die Frage nicht einmal aus der Ferne ... Die Frage hier ist, wie "verkettete Gruppierung" von "Fach" und "Semester" gleichzeitig erreicht werden kann, wie im angegebenen Beispiel erläutert ...
MahNas92