SQL-Zählgruppe nach Beispielen. SELECT-Befehl GROUP BY Abschnitt

In diesem Artikel erkläre ich Ihnen am Beispiel mehrerer Abfragen, wie Daten gruppiert werden, wie Sie die Gruppierung nach korrekt verwenden und SQL-Abfragen darin enthalten.

Die meisten Informationen in Datenbanken werden in detaillierter Form gespeichert. Allerdings besteht häufig die Notwendigkeit, Berichte einzuholen. Ermitteln Sie beispielsweise die Gesamtzahl der Benutzerkommentare oder vielleicht die Warenmenge in den Lagern. Es gibt viele ähnliche Aufgaben. Daher sieht die SQL-Sprache speziell für solche Fälle die Gruppierung nach und Konstrukte vor, die es ermöglichen, die resultierenden Datengruppen zu gruppieren bzw. zu filtern.

Ihre Verwendung bereitet jedoch unerfahrenen Autoren von Software-Erstellungen viele Probleme. Sie interpretieren die erhaltenen Ergebnisse und den Datengruppierungsmechanismus selbst nicht ganz richtig. Lassen Sie uns daher in der Praxis herausfinden, was passiert und wie.

Als Teil des Beispiels werde ich nur eine Tabelle betrachten. Der Grund ist einfach: Diese Operatoren werden bereits auf die resultierende Datenstichprobe angewendet (nachdem Tabellenzeilen kombiniert und gefiltert wurden). Das Hinzufügen von Where- und Join-Operatoren ändert also nichts am Wesen.

Stellen wir uns ein abstraktes Beispiel vor. Nehmen wir an, Sie haben eine Übersichtstabelle der Forumbenutzer. Nennen wir es userstat und es sieht so aus. Ein wichtiger Punkt: Wir glauben, dass ein Benutzer nur einer Gruppe angehören kann.

Benutzername – Benutzername

forum_group – Gruppenname

mess_count – Anzahl der Nachrichten

is_have_social_profile – ob das Forumprofil einen Link zu einer Seite in einem sozialen Netzwerk enthält

Wie Sie sehen, ist die Tabelle einfach und Sie können viele Dinge mit einem Taschenrechner selbst berechnen. Dies ist jedoch nur ein Beispiel und es gibt nur 10 Einträge. In realen Datenbanken können Datensätze in Tausenden gemessen werden. Beginnen wir also mit den Abfragen.

Reine Gruppierung mit Group by

Stellen wir uns vor, wir müssen den Wert jeder Gruppe kennen, nämlich die durchschnittliche Bewertung der Benutzer in der Gruppe und die Gesamtzahl der im Forum hinterlassenen Nachrichten.

Zunächst eine kurze verbale Beschreibung, um das Verständnis der SQL-Abfrage zu erleichtern. Sie müssen also die berechneten Werte nach Forengruppen finden. Dementsprechend müssen Sie alle diese zehn Zeilen in drei verschiedene Gruppen einteilen: Admin, Moder, Benutzer. Dazu müssen Sie am Ende der Anfrage eine Gruppierung nach den Werten des Feldes forum_group hinzufügen. Und fügen Sie auch berechnete Ausdrücke hinzu, um sie mithilfe sogenannter Aggregatfunktionen auszuwählen.

Geben Sie Felder und berechnete Spalten an, wählen Sie forum_group, avg(raiting) als avg_raiting, sum(mess_count) als total_mess_count – Geben Sie die Tabelle aus userstat an – Geben Sie die Gruppierung nach Feldgruppe nach forum_group an

Bitte beachten Sie, dass Sie, nachdem Sie das Group-by-Konstrukt in einer Abfrage verwendet haben, nur die Felder in der Auswahl verwenden können, die nach dem Group-by-Konstrukt angegeben wurden, ohne Aggregatfunktionen zu verwenden. Die übrigen Felder müssen innerhalb von Aggregatfunktionen angegeben werden.

Ich habe auch zwei Aggregatfunktionen verwendet. AVG – berechnet den Durchschnittswert. Und SUM – berechnet die Summe.

forum_gruppeavg_ratingtotal_mess_count
Administrator 4 50
moder 3 50
Benutzer 3 150

1. Zunächst wurden alle Zeilen der Quelltabelle entsprechend den Werten des Feldes forum_group in drei Gruppen unterteilt. Beispielsweise befanden sich drei Benutzer in der Admin-Gruppe. Es gibt auch 3 Zeilen im Moder. Und innerhalb der Benutzergruppe gab es 4 Leitungen (vier Benutzer).

2. Anschließend wurden Aggregatfunktionen auf jede Gruppe angewendet. Für die Admin-Gruppe wurde die durchschnittliche Bewertung beispielsweise wie folgt berechnet: (2 + 5 + 5)/3 = 4. Die Anzahl der Nachrichten wurde als (10 + 15 + 25) = 50 berechnet.

Wie Sie sehen, nichts Kompliziertes. Wir haben jedoch nur eine Gruppierungsbedingung angewendet und nicht nach Gruppe gefiltert. Kommen wir also zum nächsten Beispiel.

Gruppieren mit Gruppieren nach und Filtern von Gruppen mit Haben

Schauen wir uns nun ein komplexeres Beispiel der Datengruppierung an. Nehmen wir an, wir müssen die Wirksamkeit von Maßnahmen bewerten, um Benutzer für soziale Aktivitäten zu gewinnen. Einfach ausgedrückt: Finden Sie heraus, wie viele Benutzer in Gruppen Links zu ihren Profilen hinterlassen haben und wie viele ignorierte Mailings usw. Im wirklichen Leben kann es jedoch viele solcher Gruppen geben, daher müssen wir diejenigen Gruppen herausfiltern, die vernachlässigt werden können (z. B. haben zu wenige Leute keinen Link hinterlassen; warum sollte man den vollständigen Bericht überladen)? In meinem Beispiel handelt es sich um Gruppen mit nur einem Benutzer.

Zunächst beschreiben wir verbal, was in der SQL-Abfrage zu tun ist. Wir müssen alle Zeilen der ursprünglichen Userstat-Tabelle nach folgenden Kriterien unterteilen: Gruppenname und Vorhandensein eines sozialen Profils. Dementsprechend ist es notwendig, die Tabellendaten nach den Feldern forum_group und is_have_social_profile zu gruppieren. Wir sind jedoch nicht an solchen Gruppen interessiert, in denen es nur eine Person gibt. Daher müssen solche Gruppen herausgefiltert werden.

Notiz: Es ist wichtig zu wissen, dass dieses Problem durch die Gruppierung nach nur einem Feld gelöst werden könnte. Wenn Sie das Case-Konstrukt verwenden. Im Rahmen dieses Beispiels werden jedoch die Möglichkeiten der Gruppierung aufgezeigt.

Ich möchte auch gleich einen wichtigen Punkt klarstellen. Sie können bei der Verwendung von Aggregatfunktionen nur nach „haveing“ filtern, nicht nach einzelnen Feldern. Mit anderen Worten handelt es sich hier nicht um ein Where-Konstrukt, sondern um einen Filter für Zeilengruppen und nicht für einzelne Datensätze. Obwohl die darin enthaltenen Bedingungen auf ähnliche Weise mit „oder“ und „und“ angegeben werden.

So würde die SQL-Abfrage aussehen

Geben Sie Felder und berechnete Spalten an, wählen Sie forum_group, is_have_social_profile, count(*) als Gesamtsumme aus – Geben Sie die Tabelle aus userstat an – Geben Sie die Gruppierung nach Feldern an, gruppieren Sie nach forum_group, is_have_social_profile – Geben Sie den Gruppenfilter mit count(*) > 1 an

Bitte beachten Sie, dass die Felder nach dem Konstrukt „Gruppe nach“ durch Kommas getrennt sind. Die Angabe von Feldern in select erfolgt auf die gleiche Weise wie im vorherigen Beispiel. Ich habe auch die Aggregatfunktion count verwendet, die die Anzahl der Zeilen in Gruppen berechnet.

Hier ist das Ergebnis:

forum_gruppeis_have_social_profilegesamt
Administrator 1 2
moder 1 2
Benutzer 0 3

Schauen wir uns Schritt für Schritt an, wie dieses Ergebnis ausgefallen ist.

1. Zunächst wurden 6 Gruppen gebildet. Jede der forum_group-Gruppen wurde basierend auf den Werten des Feldes is_have_social_profile in zwei Untergruppen unterteilt. Mit anderen Worten, Gruppen: , , , , , .

Notiz: Übrigens gäbe es nicht unbedingt 6 Gruppen, wenn also beispielsweise alle Administratoren ein Profil ausfüllen würden, dann gäbe es 5 Gruppen, da das Feld is_have_social_profile nur einen Wert für Benutzer der Admin-Gruppe hätte.

2. Anschließend wurde die Filterbedingung in „have“ auf jede Gruppe angewendet. Daher wurden die folgenden Gruppen ausgeschlossen: , , . Da es innerhalb jeder dieser Gruppen nur eine Zeile der Quelltabelle gab.

3. Anschließend wurden die notwendigen Daten berechnet und das Ergebnis ermittelt.

Wie Sie sehen, gibt es nichts Schwieriges in der Anwendung.

Es ist wichtig zu wissen, dass die Fähigkeiten dieser Konstrukte je nach Datenbank unterschiedlich sein können. Es kann beispielsweise mehr Aggregatfunktionen geben oder Sie können berechnete Spalten anstelle einzelner Felder als Gruppierung angeben. Diese Informationen müssen bereits in der Spezifikation berücksichtigt werden.

Jetzt wissen Sie, wie Sie Daten mit „Gruppe nach“ gruppieren und wie Sie Gruppen mit „Haben“ filtern.


Eines der wichtigsten Teams in SQL ist GROUP BY. Diese Konstruktion wurde erstellt, um separate Gruppen von Zeilen aus einer Tabelle auszuwählen, denen jeweils die in angegebenen Funktionen zugeordnet sind WÄHLEN(Zum Beispiel, ZÄHLEN(), MINDEST() usw). Schauen wir uns konkrete Beispiele an.

Nehmen wir an, wir haben eine Tabelle mit Supermärkten:

  • Ausweis- eindeutige Kennung.
  • shop_id- eindeutige Kennung des Supermarkts.
  • Preis- Milchpreis.

Wir müssen den durchschnittlichen Milchpreis in jedem Supermarkt ermitteln. beachten Sie, dass shop_id kann sich wiederholen (schließlich gibt es Supermarktketten). Deshalb müssen wir eine Gruppe entsprechend bilden shop_id und berechnen Sie für jede Zeile in dieser Gruppe den Durchschnittspreis.

Die Originaltabelle sieht so aus:

So haben wir den Durchschnittspreis in einer bestimmten Supermarktkette (oder in einem einzelnen Geschäft) ermittelt.

Eine weitere sehr häufige Verwendung ist das Abrufen eindeutiger Datensätze aus Tabellen. Im vorherigen Beispiel haben Sie festgestellt, dass das resultierende Beispiel keine Duplikate enthält shop_id, während dies in der Originaltabelle der Fall war.

Nehmen wir an, wir haben eine Tabelle mit Benutzern:

  • Ausweis- eindeutige Kennung.
  • Email - Email Benutzer.
  • Hash- eindeutiger Benutzer-Hash.

Und wir standen vor der Aufgabe zu wählen einzigartige Benutzer und insbesondere einzigartige Personen und keine einzigartigen Konten. Schließlich kann eine Person haben 100 Konten mit verschiedenen Email und natürlich, Ausweis. A Hash- das ist eine bestimmte Linie, die ihn als einzigartigen Menschen charakterisiert.

Also müssen wir wählen alle Datensätze mit einem eindeutigen Hash. Dafür wird es wieder verwendet GRUPPIERE NACH:

SELECT * FROM `table` GROUP BY `hash`

Infolgedessen werden nur eindeutige extrahiert Hash, also 2 identisch Hash Sie werden es im resultierenden Beispiel nicht sehen.

Hier sind zwei praktische Beispiel für die Verwendung von GROUP BY in SQL wir haben es geklärt.

Wir haben viel Material überprüft SQL, insbesondere Transact-SQL, aber wir haben ein so wirklich einfaches Thema wie nicht angesprochen Datengruppierung GROUP BY. Deshalb lernen wir heute, wie man den Operator „Gruppe nach“ zum Gruppieren von Daten verwendet.

Viele unerfahrene Programmierer wissen bei der Auseinandersetzung mit SQL nichts von einer Möglichkeit wie dem Gruppieren von Daten mithilfe des Operators GROUP BY, obwohl diese Funktion in der Praxis häufig benötigt wird. Unsere heutige Lektion ist diesem Thema, wie üblich mit Beispielen, gewidmet Es war für Sie einfacher und einfacher, die Verwendung dieses Operators zu erlernen, da Sie ihm auf jeden Fall begegnen werden. Wenn Sie sich für das Thema SQL interessieren, dann haben wir es, wie ich bereits sagte, mehr als einmal angesprochen, zum Beispiel in den Artikeln SQL-Sprache – JOIN oder Union und Union all, damit Sie sich mit diesem Material vertraut machen können .

Und zur Einführung ein wenig Theorie.

Was ist der GROUP BY-Operator?

GRUPPIERE NACH ist der Operator ( oder Design, je nachdem, was für Sie bequemer ist) SQL zum Gruppieren von Daten nach Feldern, wenn Aggregatfunktionen wie Summe, Max, Min, Anzahl und andere in einer Abfrage verwendet werden.

Wie Sie wissen, arbeiten Aggregatfunktionen mit einer Reihe von Werten, beispielsweise summiert sum alle Werte. Nehmen wir jedoch an, Sie müssen nach einer Bedingung oder nach mehreren Bedingungen gleichzeitig summieren. Aus diesem Grund benötigen wir den Operator „Gruppieren nach“, um alle Daten nach Feldern zu gruppieren und die Ergebnisse von Aggregatfunktionen auszugeben.

Mir scheint, dass es klarer sein wird, dies alles anhand von Beispielen zu analysieren, also kommen wir zu den Beispielen.

Notiz! Wir werden alle Beispiele in Management Studio SQL Server 2008 schreiben.

Beispiele für die Verwendung des GROUP BY-Operators

Und zunächst erstellen wir eine Testtabelle und füllen sie mit Daten, an die wir mithilfe von „group by“ unsere ausgewählten Abfragen senden. Die Tabelle und die Daten sind selbstverständlich fiktiv und dienen lediglich der Veranschaulichung.

Erstellen Sie eine Tabelle

TABELLE ERSTELLEN .( NULL, (50) NULL, NULL, NULL) ON GO

Ich habe es mit folgenden Informationen ausgefüllt:

  • Id – Datensatz-ID;
  • Name – Nachname des Mitarbeiters;
  • Summe – Bargeld;
  • Priz ist ein Zeichen für Geld (z. B. 1-Gehalt; 2-Bonus).

Gruppieren von Daten mithilfe der Gruppierung nach-Abfrage

Schauen wir uns ganz am Anfang die Syntax an gruppiere nach, d.h. Wo soll diese Konstruktion geschrieben werden:

Syntax:

Wählen Aggregatfunktionen

Aus Quelle

Wo Auswahlbedingungen

Gruppiere nach Gruppierungsfelder

Haben Bedingungen für Aggregatfunktionen

Sortieren nach Felder sortieren

Wenn wir nun alle Mittel eines bestimmten Mitarbeiters ohne Gruppierung zusammenfassen müssen, senden wir die folgende Anfrage:

SELECT SUM(summa)as summa FROM test_table WHERE name="Ivanov"

Und wenn wir einen anderen Mitarbeiter einbeziehen müssen, ändern wir einfach die Bedingung. Stimmen Sie zu, wenn es viele solcher Mitarbeiter gibt, warum sollten wir dann jeden einzelnen zusammenfassen, und das ist irgendwie nicht klar, also kommt uns die Gruppe nach Betreiber zu Hilfe. Wir schreiben eine Anfrage:

SELECT SUM(summa)as summa, name FROM test_table GROUP BY name

Wie Sie bemerkt haben, schreiben wir keine Konditionen und zeigen allen Mitarbeitern sofort die aufsummierte Höhe der Mittel an, was die Übersichtlichkeit erhöht.

Notiz! Ich stelle sofort fest, dass wir zusätzlich zu Aggregatfunktionen die gleiche Anzahl von Feldern in das Konstrukt „group by“ schreiben, je nachdem, wie viele Felder wir in die Anfrage schreiben (d. h. Gruppierungsfelder). In unserem Beispiel zeigen wir ein Feld an, also haben wir in „group by“ nur ein Feld (Name) angegeben; wenn wir mehrere Felder anzeigen würden, müssten sie alle im „group by“-Konstrukt angegeben werden (Sie werden dies weiter unten sehen). Beispiele).

Sie können auch andere Funktionen nutzen, z. B. zählen, wie oft Gelder bei einem bestimmten Mitarbeiter eingegangen sind, mit dem Gesamtbetrag der erhaltenen Gelder. Dazu verwenden wir neben der Summenfunktion auch die Zählfunktion.

SELECT SUM(summa) als [Gesamtmittel], COUNT(*) als [Anzahl der Belege], Name [Mitarbeiter] FROM test_table GROUP BY Name

Nehmen wir jedoch an, dass dies den Behörden nicht ausreicht. Sie verlangen auch eine Zusammenfassung, jedoch mit einer Gruppierung nach Attributen, d. h. Was ist das für ein Geld (Gehalt oder Bonus), dazu fügen wir einfach ein weiteres Feld zur Gruppierung hinzu, und zum besseren Verständnis fügen wir eine Sortierung nach Mitarbeiter hinzu, und das Ergebnis wird wie folgt sein:

SELECT SUM(summa)as [Gesamtmittel], COUNT(*) as [Anzahl der Belege], Name [Mitarbeiter], Preis [Quelle] FROM test_table GROUP BY name, priz ORDER BY name

Jetzt wird alles angezeigt, d.h. wie viel Geld der Mitarbeiter wie oft und aus welcher Quelle erhalten hat.

Zur Konsolidierung schreiben wir nun eine noch komplexere Abfrage mit Gruppierung, fügen aber auch die Namen dieser Quelle hinzu, da Sie zustimmen werden, dass anhand der Attributbezeichner nicht klar ist, aus welcher Quelle die Gelder stammen. Hierfür nutzen wir die Konstruktion Fall.

SELECT SUM(summa) AS [Gesamtbargeld], COUNT(*) AS [Anzahl der Belege], Name [Mitarbeiter], CASE WHEN priz = 1 dann „Gehalt“ WHEN priz = 2 dann „Bonus“ ELSE „Keine Quelle“ ENDE AS [Quelle] FROM test_table GROUP BY name, priz ORDER BY name

Jetzt ist alles ganz klar und auch für Anfänger nicht mehr so ​​schwierig.

Lassen Sie uns auch auf die Bedingungen für die Endergebnisse von Aggregatfunktionen eingehen ( haben). Mit anderen Worten: Wir fügen eine Bedingung hinzu, nicht für die Auswahl der Zeilen selbst, sondern für den Endwert der Funktionen, in unserem Fall ist es sum oder count. Zum Beispiel müssen wir dasselbe anzeigen, aber nur die mit „Gesamtfonds“ mehr als 200. Fügen Sie dazu die Have-Bedingung hinzu:

WÄHLEN Sie SUM(summa) als [Gesamtbargeld], COUNT(*) als [Anzahl der Belege], Name [Mitarbeiter], CASE WENN Preis = 1, dann „Gehalt“, WENN Preis = 2, dann „Bonus“, ELSE „Keine Quelle“ ENDE AS [Quelle] FROM test_table GROUP BY name, priz --group HAVING SUM(summa) > 200 --select ORDER BY name --sort

Jetzt haben wir alle Werte von sum(summa) angezeigt, die größer als 200 sind, alles ist einfach.

Ich hoffe, dass Ihnen nach der heutigen Lektion klar wurde, wie und warum Sie das Design verwenden sollten gruppiere nach. Viel Glück! In den folgenden Artikeln werden wir uns weiterhin mit SQL befassen.

Letzte Aktualisierung: 19.07.2017

T-SQL verwendet die Anweisungen GROUP BY und HAVING zum Gruppieren von Daten und verwendet dabei die folgende formale Syntax:

Wählen Sie Spalten aus der Tabelle aus

GRUPPIERE NACH

Die GROUP BY-Klausel bestimmt, wie die Zeilen gruppiert werden.

Lassen Sie uns beispielsweise Produkte nach Hersteller gruppieren

SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer

Die erste Spalte in der SELECT-Anweisung „Manufacturer“ stellt den Namen der Gruppe dar und die zweite Spalte „ModelsCount“ stellt das Ergebnis der Count-Funktion dar, die die Anzahl der Zeilen in der Gruppe berechnet.

Es ist zu bedenken, dass jede Spalte, die in einer SELECT-Anweisung verwendet wird (Spalten, die das Ergebnis von Aggregatfunktionen speichern, nicht mitgezählt), nach der GROUP BY-Klausel angegeben werden muss. Im obigen Fall wird beispielsweise die Spalte „Hersteller“ sowohl in der SELECT- als auch in der GROUP BY-Klausel angegeben.

Und wenn die SELECT-Anweisung eine oder mehrere Spalten auswählt und auch Aggregatfunktionen verwendet, müssen Sie die GROUP BY-Klausel verwenden. Daher funktioniert das folgende Beispiel nicht, da es keinen Gruppierungsausdruck enthält:

SELECT Hersteller, COUNT(*) AS ModelsCount FROM Products

Als weiteres Beispiel fügen wir eine Gruppierung nach der Anzahl der Produkte hinzu:

SELECT Manufacturer, ProductCount, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer, ProductCount

Die GROUP BY-Klausel kann nach mehreren Spalten gruppieren.

Wenn die Spalte, nach der Sie gruppieren, einen NULL-Wert enthält, bilden die Zeilen mit dem NULL-Wert eine separate Gruppe.

Beachten Sie, dass die GROUP BY-Klausel nach der WHERE-Klausel, aber vor der ORDER BY-Klausel stehen muss:

SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products WHERE Price > 30000 GROUP BY Manufacturer ORDER BY ModelsCount DESC

Gruppenfilterung. HABEN

Operator HABEN bestimmt, welche Gruppen in das Ausgabeergebnis einbezogen werden, d. h. es filtert Gruppen.

Die Verwendung von HAVING ähnelt in vielerlei Hinsicht der Verwendung von WHERE. Nur WHERE wird zum Filtern von Zeilen verwendet, HAVING wird zum Filtern von Gruppen verwendet.

Suchen wir zum Beispiel alle Produktgruppen nach Hersteller, für die mehr als ein Modell definiert ist:

SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer HAVING COUNT(*) > 1

In diesem Fall können wir in einem Befehl die Ausdrücke WHERE und HAVING verwenden:

SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products WHERE Price * ProductCount > 80000 GROUP BY Manufacturer HAVING COUNT(*) > 1

Das heißt, in diesem Fall werden die Zeilen zunächst gefiltert: Es werden die Produkte ausgewählt, deren Gesamtkosten mehr als 80.000 betragen. Anschließend werden die ausgewählten Produkte nach Hersteller gruppiert. Und dann werden die Gruppen selbst gefiltert – diejenigen Gruppen, die mehr als ein Modell enthalten, werden ausgewählt.

Wenn eine Sortierung erforderlich ist, steht der ORDER BY-Ausdruck nach dem HAVING-Ausdruck:

SELECT Manufacturer, COUNT(*) AS Models, SUM(ProductCount) AS Units FROM Products WHERE Price * ProductCount > 80000 GROUP BY Manufacturer HAVING SUM(ProductCount) > 2 ORDER BY Units DESC

In diesem Fall erfolgt die Gruppierung nach Hersteller und es werden auch die Anzahl der Modelle für jeden Hersteller (Modelle) und die Gesamtzahl aller Produkte für alle diese Modelle (Einheiten) ausgewählt. Am Ende werden die Gruppen absteigend nach der Anzahl der Produkte sortiert.

In diesem Tutorial erfahren Sie, wie Sie die SQL-Anweisung verwenden GRUPPIERE NACH mit Syntax und Beispielen.

Beschreibung

Die SQL-GROUP BY-Klausel kann in einer SELECT-Anweisung verwendet werden, um Daten über mehrere Datensätze hinweg zu sammeln und die Ergebnisse in einer oder mehreren Spalten zu gruppieren.

Syntax

Die Syntax für die GROUP BY-Anweisung in SQL lautet:

Parameter oder Argumente

expression1 , expression2 , … expression_n Ausdrücke, die nicht in einer Aggregatfunktion gekapselt sind und in ein GROUP BY am Ende der SQL-Abfrage eingefügt werden müssen. aggregat_function Dies ist eine Aggregatfunktion wie SUM, COUNT, MIN, MAX oder AVG. aggregat_expression Dies ist die Spalte oder der Ausdruck, für die die aggregat_function verwendet wird. Tabellen Die Tabellen, aus denen Sie Datensätze abrufen möchten. Die FROM-Klausel muss mindestens eine Tabelle angeben. WHERE-Bedingungen Optional. Dies sind die Bedingungen, die erfüllt sein müssen, um Datensätze auszuwählen. ORDER BY-Ausdruck Optional. Der Ausdruck, der zum Sortieren der Datensätze im Ergebnissatz verwendet wird. Wenn mehr als ein Ausdruck angegeben wird, müssen die Werte durch Kommas getrennt werden. ASC optional. ASC sortiert die Ergebnismenge in aufsteigender Reihenfolge nach Ausdruck. Dies ist das Standardverhalten, wenn kein Modifikator angegeben ist. DESC Optional. DESC sortiert die Ergebnismenge in absteigender Reihenfolge nach Ausdruck.

Beispiel – Verwendung von GROUP BY mit der SUM-Funktion

Sehen wir uns an, wie man GROUP BY mit der SUM-Funktion in SQL verwendet.
In diesem Beispiel haben wir eine Mitarbeitertabelle mit den folgenden Daten:

Abteilungs-ID total_salaries
500 119500
501 113000

In diesem Beispiel haben wir die SUM-Funktion verwendet, um alle Gehälter für jede dept_id zu addieren, und wir haben dem SUM(salary)-Ergebnis den Alias ​​„total_salaries“ gegeben. Da dept_id nicht in der SUM-Funktion gekapselt ist, muss sie in der GROUP BY-Klausel angegeben werden.

Beispiel – Verwendung von GROUP BY mit der COUNT-Funktion

Sehen wir uns an, wie man die GROUP BY-Klausel mit der COUNT-Funktion in SQL verwendet.

In diesem Beispiel haben wir eine Produkttabelle mit den folgenden Daten:

In diesem Beispiel haben wir die COUNT-Funktion verwendet, um die Anzahl der Gesamtprodukte für jede Kategorie-ID zu berechnen, und wir haben den Alias ​​„total_products“ als Ergebnisse der COUNT-Funktion angegeben. Wir haben alle NULL-Kategorie-ID-Werte ausgeschlossen, indem wir sie in der WHERE-Klausel gefiltert haben. Da die Kategorie-ID nicht in der COUNT-Funktion gekapselt ist, muss sie in der GROUP BY-Klausel angegeben werden.

Beispiel – Verwendung von GROUP BY mit der MIN-Funktion

Sehen wir uns nun an, wie die GROUP BY-Klausel mit der MIN-Funktion in SQL verwendet wird.

In diesem Beispiel verwenden wir wieder die Mitarbeitertabelle mit den folgenden Daten:

Es werden 2 Einträge ausgewählt. Hier sind die Ergebnisse, die Sie erhalten:

Abteilungs-ID niedrigstes_Gehalt
500 57500
501 42000

In diesem Beispiel haben wir die MIN-Funktion verwendet, um den niedrigsten Gehaltswert für jede dept_id zurückzugeben, und wir haben die Ergebnisse der MIN-Funktion mit einem Alias ​​„lowest_salary“ versehen. Da dept_id nicht in der MIN-Funktion gekapselt ist, muss sie in der GROUP BY-Klausel angegeben werden.

Beispiel – Verwendung von GROUP BY mit der MAX-Funktion

Schauen wir uns abschließend an, wie die GROUP BY-Klausel mit der MAX-Funktion verwendet wird.

Lassen Sie uns erneut die Mitarbeitertabelle verwenden, aber dieses Mal ermitteln wir das höchste Gehalt für jede dept_id:

Mitarbeiternummer Vorname Familienname, Nachname Gehalt Abteilungs-ID
1001 Justin Bieber 62000 500
1002 Selena Gomez 57500 500
1003 Mila Kunis 71000 501
1004 Tom Kreuzfahrt 42000 501

Geben Sie die folgende SQL-Anweisung ein.



Aktie