27th Jul 2023 10 Leseminuten Wie man COUNT() mit GROUP BY verwendet: 5 praktische Beispiele Radu Gheorghiu GROUP BY Aggregatfunktionen Numerische Funktionen Inhaltsverzeichnis Wie man COUNT() und GROUP BY verwendet Wann wird GROUP BY verwendet? Wann wird die Funktion COUNT() verwendet? 5 Beispiele für die Verwendung von COUNT() mit GROUP BY Beispiel 1: GROUP BY einer einzelnen Spalte Beispiel #2: GROUP BY Mehrere Spalten Beispiel Nr. 3: Verwendung von WHERE mit COUNT() und GROUP BY Beispiel Nr. 4: Verwendung von ORDER BY mit COUNT() und GROUP BY Beispiel Nr. 5: COUNT(Ausdruck) COUNT(*) - Zählen von Zeilen Zählen von NON-NULL-Werten in einer Spalte Zählen von eindeutigen NON-NULL-Werten in einer Spalte Möchten Sie mehr über COUNT() und GROUP BY wissen? Die Verwendung der Funktion COUNT() mit GROUP BY ist eines der häufigsten SQL-Konstrukte in Aggregatabfragen. Lesen Sie diesen Artikel, um anhand von 5 Beispielen zu erfahren, wie Sie COUNT() mit GROUP BY richtig verwenden. In diesem Artikel wird erklärt, wie wichtig die Verwendung von COUNT mit GROUP BY ist. Wir werden darüber sprechen, warum sie in SQL unverzichtbar ist und wie sie die Analyse und Zusammenfassung von Daten nach bestimmten Kriterien ermöglicht. Mit dieser Kombination können Benutzer aussagekräftige Erkenntnisse gewinnen, Zählungen berechnen und statistische Zusammenfassungen aus großen Datensätzen erstellen. Wenn Sie eine gründliche Übersicht über die grundlegenden SQL-Konzepte wie COUNT() und GROUP BY suchen, empfehle ich Ihnen unseren interaktiven SQL für Anfänger Kurs. Er enthält 129 Übungen, mit denen Sie alle wichtigen SQL-Konzepte wiederholen können. Wie man COUNT() und GROUP BY verwendet Wenn Sie nur wegen der schnellen Antwort hier sind, hier ist die Kurzfassung: Die korrekte Verwendung von COUNT() mit GROUP BY wird in der folgenden Abfrage gezeigt: SELECT Store, COUNT(*) as NumberOfSales, FROM Sales GROUP BY Store; Lassen Sie uns das Ergebnis aufschlüsseln, um zu verstehen, wie diese Abfrage funktioniert. Die Zeilen mit demselben Wert in der Spalte Store werden gruppiert. Stellen Sie sich eine Zwischentabelle vor, in der diese Zeilen gruppiert und mit verschiedenen Farben markiert sind, wie in der Abbildung unten. Dies wäre unsere Zwischentabelle, die nur die Spalte Store enthält, da dies die Spalte ist, die Teil unserer Anweisung SELECT ist. StoreProductIDCustomerID Store A1657 Store A11116 Store A14525 Store B1369 Store B11138 Store C13616 Store C1118 Die Datenbank zählt dann logischerweise die Anzahl der Zeilen in jeder Gruppe mit Hilfe der Funktion COUNT(*). Diese Zählung stellt die Anzahl der Bestellungen für jede Filiale dar. Sobald die Zeilen gezählt sind, ist es nicht mehr nötig, doppelte Zeilen mit demselben Store-Wert zu haben. GROUP BY reduziert also die Anzahl der Zeilen auf eindeutige Werte. Mit anderen Worten, die einzelnen Zeilen werden entfernt und wir erhalten eine Zusammenfassung für jede Gruppe. Am Ende erhalten wir das folgende Ergebnis: StoreNumberOfSales Store A3 Store B2 Store C2 Wann wird GROUP BY verwendet? GROUP BY ist eine SQL-Klausel, die Zeilen auf der Grundlage von einem oder mehreren Spaltenwerten gruppiert. Sie wird oft in Kombination mit Aggregatfunktionen wie COUNT(), SUM(), AVG(), MAX() und MIN() verwendet, um Berechnungen mit gruppierten Daten durchzuführen. Die GROUP BY Klausel ist nützlich, wenn Sie: Berechnungen und Aggregationen auf Teilmengen von Daten durchführen. Zusammenfassende Statistiken und Metriken für verschiedene Gruppen oder Kategorien zu erstellen. Muster und Trends innerhalb bestimmter Gruppen zu erkennen. Berichte erstellen und Daten auf der Grundlage verschiedener Dimensionen oder Attribute analysieren möchten. Anwendung von Filtern und Bedingungen auf gruppierte Daten unter Verwendung der HAVING Zusammenfassend lässt sich sagen, dass GROUP BY verwendet wird, um Daten auf der Grundlage bestimmter Spalten, Funktionen oder Ausdrücke zu organisieren und zusammenzufassen, wodurch Sie Einblicke gewinnen und Berechnungen für bestimmte Gruppen innerhalb eines Datensatzes durchführen können. Wann wird die Funktion COUNT() verwendet? COUNT() ist eine der gebräuchlichsten Aggregatfunktionen von SQL. Sie gibt die Anzahl der Zeilen zurück, die einer bestimmten Bedingung entsprechen oder in einer Ergebnismenge enthalten sind. Sie wird häufig verwendet, um die Gesamtzahl der Datensätze in einer Tabelle abzurufen oder um die Anzahl der Vorkommen eines bestimmten Wertes in einer Spalte zu berechnen. 5 Beispiele für die Verwendung von COUNT() mit GROUP BY Nachdem wir nun die grundlegenden Szenarien durchgespielt haben, in denen COUNT() und GROUP BY verwendet werden, wollen wir nun einige der komplizierteren Beispiele durchgehen. Wir beginnen mit einfacheren Beispielen und arbeiten uns dann zu komplexeren Szenarien vor. Beispiel 1: GROUP BY einer einzelnen Spalte Das einfachste Szenario ist, dass Sie nach einer einzelnen Spalte gruppieren müssen. Im folgenden Beispiel müssen wir herausfinden, wie sich die Anzahl der Mitarbeiter unseres Unternehmens auf die verschiedenen Berufsbezeichnungen verteilt. Bevor wir uns die SQL-Lösung für dieses Szenario ansehen, gehen wir die Beispieldaten durch. Dies ist die employees Tabelle: EmployeeIDFirstNameLastNameJobTitle 1JohnDoeManager 2JaneSmithSupervisor 3MarkJohnsonDeveloper 4EmilyWilliamsAnalyst 5MichaelBrownDesigner 6SarahDavisDeveloper 7RobertWilsonDesigner 8JessicaTaylorDeveloper Durch die Verwendung der Funktion COUNT mit GROUP BY in der Spalte JobTitle können wir eine Aufschlüsselung der Anzahl der Mitarbeiter in jeder spezifischen Rolle erhalten. Sie können die Abfrage und die Ausgabe (basierend auf den Beispieldaten) unten sehen: SELECT JobTitle, COUNT(*) AS NumberOfEmployees FROM employees GROUP BY JobTitle; JobTitleNumberOfEmployees Analyst1 Designer2 Developer3 Manager1 Supervisor1 Dieses Beispiel funktioniert auf die gleiche Weise wie unsere ursprüngliche Abfrage. GROUP BY fasst die Zeilen für Mitarbeiter mit der gleichen Berufsbezeichnung in einer Gruppe zusammen. Dann zählt die Funktion COUNT() die Zeilen in jeder Gruppe. GROUP BY fasst dann die Zeilen in jeder Gruppe zusammen und behält nur den Wert der Spalte JobTitle und die Anzahl. Beispiel #2: GROUP BY Mehrere Spalten Natürlich können Sie Zeilen nach mehr als einer Spalte gruppieren. In diesem Beispiel sehen wir uns eine Beispiel orders Tabelle, die grundlegende Bestellinformationen enthält: OrderIDCustomerIDProductIDProductCategoryOrderDateStatusAmount 11011001Electronics2023-05-01Completed150.00 21021002Clothing2023-05-02Completed80.00 31011001Home Goods2023-06-03In progress60.00 4103NULLAccessories2023-06-03Canceled200.00 51011002Electronics2023-07-04NULL120.00 61021001NULL2023-07-05NULLNULL 71031002Clothing2023-07-06In progress90.00 81021002Accessories2023-08-07NULL75.00 9103NULLNULL2023-08-08NULL100.00 101011001Home Goods2023-09-09NULLNULL 111021001Home Goods2023-06-05In progress80.00 121031004Accessories2023-06-06Completed75.00 131021005Electronics2023-08-06Completed88.00 Wir müssen eine Abfrage schreiben, die die Anzahl der von jedem Kunden aufgegebenen Bestellungen und die ProductCategory der jeweiligen Bestellung anzeigt. Das bedeutet, dass wir die CustomerID und die Kategorie, in die die Bestellung fällt, zurückgeben müssen. Die Abfrage sieht wie folgt aus: SELECT CustomerID, ProductCategory, COUNT(*) AS NumberOfOrders FROM orders GROUP BY CustomerID, ProductCategory; Das Ergebnis der Abfrage ist unten zu sehen: CustomerIDProductCategoryNumberOfOrders 101Electronics2 101Home Goods2 102Electronics2 102Accessories2 102Clothing1 103Accessories2 103Clothing1 103NULL1 Unsere Abfrage gruppiert Zeilen nach zwei Spalten: CustomerID und ProductCategory. Das bedeutet, dass GROUP BY Zeilen mit den gleichen Werten von CustomerID und ProductCategory in einer Gruppe zusammenfasst. (Zeilen für CustomerID 101 und die Kategorie Electronics sind in einer Gruppe, aber Zeilen für CustomerID 101 und die Kategorie Home Goods sind in einer anderen Gruppe.) Dann werden die Zeilen in jeder Gruppe durch COUNT() gezählt. Beispiel Nr. 3: Verwendung von WHERE mit COUNT() und GROUP BY In unserem vorherigen Beispiel haben wir ein Szenario analysiert, in dem wir ein Aggregat aus allen Informationen in unserer orders Tabelle. Manchmal möchten wir jedoch diese Informationen aufschlüsseln und nur die Bestellungen für ausgewählte Kategorien anzeigen. Unter Verwendung derselben Beispieldaten, die wir zuvor hatten, werden wir nun eine Abfrage schreiben, die dieselben Informationen für Bestellungen anzeigt, die in die Kategorien "Accessoires" oder "Kleidung" fallen ProductCategory. Dazu können wir die Abfrage aus Beispiel 2 verwenden und lediglich eine WHERE Klausel hinzufügen. Diese Klausel filtert nach Datensätzen, bei denen ProductCategory gleich "Accessoires" oder "Bekleidung" ist. SELECT CustomerID, ProductCategory, COUNT(*) AS NumberOfOrders FROM orders WHERE ProductCategory IN (‘Accessories’, ‘Clothing’) GROUP BY CustomerID, ProductCategory; CustomerIDProductCategoryNumberOfOrders 102Accessories2 103Accessories1 102Clothing1 103Clothing1 Falls es nicht ganz intuitiv ist, wie die Datenbank die Ergebnisse mit der obigen Abfrage erzeugt hat, hier eine schrittweise Erklärung, was hinter den Kulissen passiert ist: Zunächst durchsucht die Datenbank die orders Tabelle und liest alle Zeilen. Dann wendet sie die Filterbedingung in WHERE ProductCategory IN (‘Accessories’, ‘Clothing’ ) an, um die Zeilen zu filtern. Nach diesem Schritt werden nur die Zeilen, deren Produktkategorie "Accessoires" oder "Kleidung" ist, für die weitere Verarbeitung berücksichtigt. Die gefilterten Zeilen werden dann auf der Grundlage der Werte in den Spalten CustomerID und ProductCategory gruppiert, die in der Klausel GROUP BY angegeben sind. Für jede der eindeutigen Kombinationen von CustomerID und ProductCategory wird die Funktion COUNT(*) angewendet. Dadurch wird die Anzahl der Zeilen innerhalb jeder Gruppe gezählt. Die endgültige Ergebnismenge enthält die CustomerID, ProductCategory und die Anzahl der Bestellungen (in der Spalte NumberOfOrders ) für jede Gruppe. Zusammenfassend lässt sich sagen, dass die Datenbank die Zeilen filtert, die die angegebene Filterbedingung erfüllen. Anschließend werden sie nach den in der Klausel GROUP BY angegebenen Spalten gruppiert und die Anzahl der Bestellungen in jeder dieser Gruppen berechnet. Die endgültige Ausgabe enthält CustomerID, ProductCategory und die entsprechende Anzahl der Bestellungen für jede eindeutige Kombination von CustomerID und ProductCategory. Beispiel Nr. 4: Verwendung von ORDER BY mit COUNT() und GROUP BY Wenn man sich das Ergebnis von Beispiel 4 ansieht, kann man erkennen, dass einige der Zeilen in der Ausgabe gemischt sind. Das liegt daran, dass die Spalten in der Liste GROUP BY im Allgemeinen eine Sortierung der Ausgabe auf der Grundlage der Liste der Spalten im Abschnitt GROUP BY erfordern, aber nicht garantieren. Wenn wir aber beispielsweise die Ergebnisse nach verschiedenen Bedingungen ordnen müssen (z. B. nach einer Zeitleiste oder nach Datum), müssen wir eine ORDER BY-Klausel verwenden : SELECT CustomerID, ProductCategory, COUNT(*) AS NumberOfOrders FROM orders WHERE ProductCategory IN (‘Accessories’, ‘Electronics’) GROUP BY CustomerID, ProductCategory ORDER BY ProductCategory, CustomerID; CustomerIDProductCategoryNumberOfOrdes 101Accessories2 102Accessories2 102Electronics1 103Electronics2 Wir haben die ORDER BY Klausel mit der Liste der Spalten, nach denen wir die Daten sortieren wollen, hinzugefügt. Wie Sie sehen können, werden die Ausgabedaten auf der Grundlage der Reihenfolge der aufgeführten Spalten sortiert. Beispiel Nr. 5: COUNT(Ausdruck) Bisher haben wir uns einfache Beispiele für die Arbeit mit COUNT() angeschaut; der Zweck war, alle Zeilen im Quelldatensatz oder in der Tabelle zu zählen. Es gibt jedoch auch komplexere Möglichkeiten, die Kombination COUNT–GROUP BY zu verwenden. Um dies zu erklären, werden wir einen neuen Beispieldatensatz erstellen. Wir haben eine Tabelle namens SurveyResponses die Antworten auf eine Umfrage speichert. Einige der Fragen sind optional, weshalb es einige Befragte mit Antwortwerten von NULL gibt; sie haben die optionalen Fragen übersprungen. Sie können die Beispieldaten unten sehen: ResponseIDRespondentIDRespondentNameQuestionIDAnswer 1101John1Agree 2101John2No 3101John3Yes 4102Sarah1Yes 5102Sarah2Not Sure 6102Sarah3NULL 7103Mark1No 8103Mark2Maybe 9103Mark3No 10104Emily1Yes 11104Emily2Not Sure 12104Emily3Disagree COUNT(*) - Zählen von Zeilen Die häufigste Verwendung der Funktion COUNT (und ihre Standardfunktionalität, auch wenn sie mit GROUP BY verwendet wird) besteht darin, die Anzahl der Zeilen zu zählen. Wenn wir beispielsweise die Antworttypen von Umfragefragen zählen wollen, können wir die folgende Abfrage verwenden: SELECT COUNT(*) AS NumberOfYesAnswers, Answer FROM SurveyResponses GROUP BY Answer; Die Ausgabe sieht dann so aus: NumberOfAnswersAnswer 3Yes 3No 2Not Sure 1Agree 1Disagree 1Maybe 1NULL Das Ergebnis dieser Abfrage ist eine Zählung aller Zeilen, die einer bestimmten Antwort entsprechen. Sie gibt die Gesamtzahl der Umfrageantworten und den Typ der Antwort zurück. Zählen von NON-NULL-Werten in einer Spalte Schauen wir uns ein anderes Beispiel an, das auf den ersten Blick die gleichen Ergebnisse liefern könnte. In diesem Beispiel gibt es jedoch eine wichtige Besonderheit: Anstatt * als Parameter in unserer Funktion COUNT() zu verwenden, verwenden wir COUNT() mit einem Spaltennamen. Wir werden die Abfrage im vorherigen Beispiel ändern. Anstelle des Parameters * für die Funktion COUNT() werden wir ihn durch die Spalte Answer ersetzen. Unsere neue Abfrage sieht wie folgt aus: SELECT COUNT(Answer) AS NumberOfAnswers, AnswerFROM SurveyResponses GROUP BY Answer; Wenn wir diese neue Abfrage ausführen, werden wir feststellen, dass die zurückgegebenen Ergebnisse fast genau dieselben sind: NumberOfAnswersAnswer 3Yes 3No 2Not Sure 1Agree 1Disagree 1Maybe 0NULL Wir können sehen, dass sich die Ausgabe für den NULL Antwortwert von 1 auf 0 geändert hat. Das liegt daran, dass die Funktion COUNT() bei der Aggregation nur die Werte berücksichtigt, die nichtNULL sind. Vorher haben wir COUNT(*) verwendet, was implizit bedeutet, dass die Zeilen gezählt werden; COUNT(Answer) wird die Werte in der Spalte Answer zählen. Und da wir mit NULL einen Wert hatten, werden diese Werte bei der Berechnung übersprungen - in diesem zweiten Szenario wird 0 zurückgegeben. Zählen von eindeutigen NON-NULL-Werten in einer Spalte In dieser dritten Variante der Verwendung der Funktion COUNT verwenden wir dieselbe Abfrage wie in unserem vorherigen Beispiel. Dieses Mal fügen wir jedoch das Schlüsselwort DISTINCT vor dem Spaltennamen hinzu. SELECT Answer, COUNT(DISTINCT Answer) AS DistinctCount FROM SurveyResponses GROUP BY Answer; StatusDistinctCount Yes1 No1 Not Sure1 Agree1 Disagree1 Maybe1 NULL0 In der obigen Ausgabe können wir sehen, dass das Ergebnis dieser Abfrage alle positiven Werte in der Spalte DistinctCount auf 1 gesetzt hat. Das Hinzufügen des Schlüsselworts DISTINCT bedeutet, dass die Funktion COUNT jedes Mal, wenn sie einen neuen Wert findet, den sie noch nicht gesehen hat, diesen Status zu ihrer Liste hinzufügt und eine 1 zu ihrer Anzahl hinzufügt. Findet sie jedoch denselben Statuswert ein zweites Mal oder öfter, überspringt sie das Zählen. Möchten Sie mehr über COUNT() und GROUP BY wissen? Die Verwendung von COUNT() mit GROUP BY ist nur eine der vielen leistungsstarken Funktionen, die SQL bietet. Wenn Sie SQL weiter erforschen und seine Möglichkeiten wirklich beherrschen möchten, empfehle ich Ihnen unseren umfassenden Kurs SQL für Anfänger . Wenn Sie auf der Suche nach SQL-Übungen sind, empfehle ich Ihnen unseren SQL-Praxis Track, der über 600 SQL-Übungen enthält. Nachdem Sie unsere Kurse besucht haben, haben Sie vielleicht das Gefühl, dass Sie einen Job im Bereich SQL finden möchten. Um Ihnen bei der Vorbereitung auf Ihr Vorstellungsgespräch zu helfen, haben wir eine Liste von SQL-Vorstellungsfragen zusammengestellt, die Ihnen einige Beispiele für Fragen und Probleme in SQL aus der Praxis zeigt. Tags: GROUP BY Aggregatfunktionen Numerische Funktionen