11th Jan 2023 7 Leseminuten Wie man WHERE mit GROUP BY in SQL verwendet Nicole Darnley GROUP BY Inhaltsverzeichnis Die WHERE-Klausel Die GROUP BY-Klausel WHERE und GROUP BY zusammen verwenden WHERE und GROUP BY - Wie geht es jetzt weiter? In diesem Artikel besprechen wir, wie man die WHERE- und GROUP BY-Klauseln in SQL kombiniert Wenn Sie täglich SQL schreiben, werden Sie schnell feststellen, wie oft sowohl die WHERE- als auch die GROUP BY-Klausel verwendet werden. WHERE ist ein wesentlicher Bestandteil der meisten Abfragen. Sie ermöglicht es Ihnen, große Datensätze auf die Teile zu filtern, an denen Sie interessiert sind. GROUP BY ist eines der mächtigsten Werkzeuge, die einem Analysten bei der Aggregation von Daten zur Verfügung stehen. Am Ende dieses Artikels werden Sie verstehen, wie Sie diese beiden Klauseln effektiv einsetzen und gleichzeitig häufige Fallstricke vermeiden können. Betrachten Sie beim Schreiben von SQL jede Klausel (SELECT, WHERE, GROUP BY, usw.) als ein separates Werkzeug. Wenn Sie mehr SQL-Syntax lernen, fügen Sie dieses Werkzeug zu Ihrem Werkzeugsatz hinzu. Sie können sich vorstellen, dass ein Mechaniker mit nur wenigen Werkzeugen nicht sehr effektiv sein kann. Ich würde Ihnen auch nicht empfehlen, Ihr Auto zu jemandem zu bringen, der nur eine Handvoll Werkzeuge hat. Genauso verhält es sich mit der Datenanalyse. Je mehr Werkzeuge Sie zur Verfügung haben, desto schneller und effizienter können Sie verschiedene Datensätze analysieren. Eine der umfassendsten Möglichkeiten, sich SQL-Tools anzueignen, ist unser interaktiver Kurs SQL für Anfänger. Er enthält 129 Übungen und deckt sowohl grundlegende als auch fortgeschrittene SQL-Kenntnisse ab und vermittelt Ihnen alles, was Sie brauchen, um ein effektiver Datenanalyst zu werden. Beginnen wir mit einem detaillierten Blick auf WHERE und GROUP BY. Nachdem wir uns dieses Grundwissen angeeignet haben, werden wir die beiden miteinander kombinieren und ihre volle Leistungsfähigkeit entfalten. Die WHERE-Klausel Wie bereits erwähnt, wird die WHERE-Klausel verwendet, um einen Datensatz zu filtern und nur die Datensätze zurückzugeben, die bestimmten Kriterien entsprechen. Nehmen wir den folgenden Datensatz, der die Bevölkerungszahlen der Länder für das Jahr 2022 enthält. Zur Veranschaulichung nehmen wir an, dass diese Daten in einer Tabelle namens world_populations gespeichert sind und nur die 10 bevölkerungsreichsten Länder enthalten. Wir sehen uns diese Daten an, indem wir sie ausführen: SELECT * FROM world_populations Hier ist das Ergebnis: countrypopulationyearly_changenet_changemed_ageurban_pop_pctworld_share China1,439,323,7760.00395,540,09038.61.1847 India1,380,004,3850.009913,586,63128.35.1770 United States331,002,6510.00591,937,73438.83.0425 Indonesia273,523,615.01072,898,04730.56.0351 Pakistan220,892,340.024,327,02223.35.0283 Brazil212,559,41700721,509,89033.88.0273 Nigeria206,139,589.02585,175,99018.52.0264 Bangladesh164,689,383.01011,643,22228.39.0211 Russia145,934,462.000462,20640.74.0187 Mexico128,932,753.01061,357,22429.84.0165 OK, wir haben unsere Daten. Fügen wir nun einige Filter hinzu. Beispiel 1 In unserem ersten Beispiel wollen wir nur Länder mit einer Bevölkerung von mehr als 200 Millionen sehen. Dazu führen wir die folgende Abfrage aus: SELECT * FROM world_populations WHERE population > 200000000 Und das Ergebnis: countrypopulationyearly_changenet_changemed_ageurban_pop_pctworld_share China14393237760.0039554009038.61.1847 India13800043850.00991358663128.35.1770 United States3310026510.0059193773438.83.0425 Indonesia273523615.0107289804730.56.0351 Pakistan220892340.02432702223.35.0283 Brazil2125594170.72%15098903388%2.73% Nigeria2061395892.58%51759901852%2.64% Wir sehen, dass die WHERE -Klausel Bangladesch, Russland und Mexiko herausgefiltert hat, weil ihre Bevölkerungszahlen unter dem in unserer Abfrage festgelegten Schwellenwert liegen. Beispiel #2 Die WHERE Klausel kann auch mehrere Filter unterstützen. Wir wollen nur Länder auflisten, die eine positive jährliche Veränderung in der Anzahl der Migranten aufweisen und in denen mindestens 80 % der Bevölkerung in städtischen Gebieten leben. Beachten Sie, dass wir AND in der WHERE Klausel verwendet haben, um diese beiden Bedingungen miteinander zu verbinden: SELECT * FROM world_populations WHERE migrants > 0 AND urban_pop_pct > .80 Diese Abfrage gibt zurück: countrypopulationyearly_changenet_changemed_ageurban_pop_pctworld_share United States3310026510.0059193773438.83.0425 Brazil2125594170.0072150989033.88.0273 Es gibt keine Begrenzung für die Menge der Filterung, die Sie in einer WHERE Klausel durchführen können. Weitere Einzelheiten finden Sie in unserem Vollständigen Leitfaden zur SQL WHERE-Klausel Die GROUP BY-Klausel Um GROUP BY zu verstehen, verwenden wir einen anderen Datensatz namens transactions. Er enthält Transaktionsdaten für einen Online-Händler: DescriptionProductCategoryQuantityUnitPriceCustomerID KNITTED UNION FLAG HOT WATER BOTTLEKitchen63.3917850 POPPY'S PLAYHOUSE BEDROOMToys62.117850 IVORY KNITTED MUG COSYKitchen61.6513047 BOX OF VINTAGE JIGSAW BLOCKSToys34.9513047 RED COAT RACK PARIS FASHIONClothing34.9513047 YELLOW COAT RACK PARIS FASHIONClothing34.9513047 BLUE COAT RACK PARIS FASHIONClothing34.9513047 Beispiel #1 Der Operator GROUP BY wird verwendet, um Daten zu aggregieren, indem Datensätze gruppiert werden, die denselben Wert in einem bestimmten Feld haben. Um die Frage "Wie viele Artikel wurden in jeder Produktkategorie verkauft?" zu beantworten, würden wir die folgende Abfrage ausführen: SELECT productCategory, SUM(quantity) as quantity FROM transactions GROUP BY productCategory Hier sind die Ergebnisse: ProductCategoryQuantity Kitchen12 Toys9 Clothing9 Es gibt zwei Produkte in der Produktkategorie Küche: GESTRICHENE UNION FLAG HOT WATER BOTTLE und IVORY KNITTED MUG COSY. Jedes dieser Produkte hat eine Menge von 6, so dass die Gesamtsumme für die Produktkategorie Küche 12 beträgt. In der Produktkategorie Spielzeug gibt es zwei Produkte. POPPY'S PLAYHOUSE BEDROOM hat eine Menge von 6 und BOX OF VINTAGE JIGSAW BLOCKS hat eine Menge von 3, was eine Gesamtsumme von 9 ergibt. Schließlich gibt es noch drei Produkte in der Kategorie Kleidung, die jeweils eine Menge von 3 haben, so dass die Gesamtsumme der Kategorie Kleidung 9 beträgt. Wir werden hier nicht alle aufzählen, aber es gibt viele Arten von Aggregationen, die dem Datenanalysten zur Verfügung stehen. Dazu gehören SUM(), AVG(), COUNT(), MEDIAN(), MIN(), und MAX(). Weitere Informationen finden Sie in dem Artikel Wie man Aggregatfunktionen in der WHERE-Klausel verwendet. Beispiel #2 Was, wenn wir die Mengen für jede Produktkategorie und jeden Kunden aggregieren möchten? Wir können GROUP BY mehrere Spalten: SELECT customerId, productCategory, SUM(quantity) as quantity FROM transactions GROUP BY customerId, productCategory Und das ist das Ergebnis: CustomerIDProductCategoryQuantity 17850Kitchen6 17850Toys6 13047Kitchen6 13047Toys3 13047Clothing9 Wir sehen, dass es für jede Kombination von Kunde und Produktkategorie eine Zeile gibt; jetzt wissen wir, wie viele Artikel jeder Kunde von jeder Kategorie gekauft hat. Weitere Informationen über GROUP BY finden Sie unter Verwendung von GROUP BY in SQL und GROUP BY in SQL erklärt. WHERE und GROUP BY zusammen verwenden Nachdem wir nun die Grundlage geschaffen haben, können wir WHERE und GROUP BY miteinander kombinieren. Es ist wichtig, daran zu denken, dass die WHERE Klausel den Datensatz filtert , bevor die GROUP BY Klausel ausgewertet wird. Außerdem wird die WHERE Klausel immer vor GROUP BY stehen. Wenn Sie sie danach einfügen, wird die Abfrage einen Fehler zurückgeben. Beispiel #1 Betrachten Sie denselben Datensatz und überlegen Sie, wie wir die Frage "Wie hoch ist der durchschnittliche Stückpreis von Küchenprodukten und Spielzeug?" beantworten würden. Zunächst müssen wir nach Küchenartikeln und Spielzeug filtern. Anschließend berechnen wir den durchschnittlichen Stückpreis. Hier ist die Abfrage: SELECT productCategory, AVG(UnitPrice) as AvgUnitPrice FROM transactions WHERE productCategory in(‘Kitchen’, ‘Toys’) GROUP BY productCategory Und das Ergebnis ist: ProductCategoryAvgUnitPrice Kitchen2.52 Toys3.05 Der durchschnittliche Stückpreis wird nur für Küchen- und Spielzeugprodukte berechnet. Alle anderen Kategorien werden aus der Abfrage herausgefiltert. Beispiel #2 Betrachten wir nun, wie wir die Gesamtmenge der Produkte nach Kategorie erhalten würden, bei denen der durchschnittliche Stückpreis größer als 3 ist. Dazu würden wir Folgendes ausführen: SELECT productCategory, SUM(quantity) as quantity FROM transactions WHERE unitPrice > 3 GROUP BY productCategory In diesem Beispiel werden die Aggregate anhand der gefilterten Zeilen berechnet. Wir erhalten das folgende Ergebnis: ProductCategoryQuantity Kitchen6 Toys3 Clothing9 Da nur die Produkte GEWIRKTE UNIONFLASCHE, KASTEN MIT VINTAGE JIGSAW-BLÖCKCHEN, ROTES MÄDCHENRACK PARIS FASHION, GELBES MÄDCHENRACK PARIS FASHION und BLAUES MÄDCHENRACK PARIS FASHION einen Stückpreis von mehr als 3 haben, sind dies die einzigen Produkte, die in die Aggregation einbezogen werden. Wenn wir die Klausel WHERE ausschließen würden, ergäben sich die folgenden Ergebnisse: ProductCategoryQuantity Kitchen12 Toys9 Clothing9 Hier sehen wir, dass die Mengen aller Produkte, unabhängig vom Stückpreis, summiert werden. Die Gesamtmenge ist für alle Produkte anders als für Produkte mit einem Stückpreis über 3. Beispiel #3 Was ist, wenn wir nach einer aggregierten Spalte filtern wollen? Dies ist die Aufgabe der HAVING Klausel. Sie können keine Aggregation in die WHERE-Klausel einfügen. Die HAVING -Klausel wird anstelle von WHERE verwendet, wenn nach Aggregatfunktionen gefiltert wird. Wir können dies anhand eines weiteren Beispiels veranschaulichen. Fahren wir mit dem obigen Beispiel fort und filtern die Ergebnisse nach Produktkategorien, bei denen der durchschnittliche Stückpreis größer als 3 ist. Um dies zu erreichen, würden wir schreiben: SELECT productCategory AVG(UnitPrice) as AvgUnitPrice FROM transactions WHERE productCategory in (‘Kitchen’, ‘Toys’) GROUP BY productCategory HAVING AVG(UnitPrice) > 3 Ergebnis: ProductCategoryAvgUnitPrice Toys3.05 Zunächst schränkt die Klausel WHERE die Daten nur auf die Kategorien Küche und Produkt ein. Dann aggregiert GROUP BY den durchschnittlichen Stückpreis für jede Kategorie. Schließlich filtert die Klausel HAVING die Ergebnisse weiter, um nur Produktkategorien mit einem durchschnittlichen Stückpreis von mehr als 3 einzuschließen. Würde man die Klausel HAVING entfernen, wären sowohl die Kategorie Küche als auch die Kategorie Spielzeug im Ergebnis zu sehen. Da der durchschnittliche Stückpreis von Küchenartikeln jedoch unter 3 liegt, wird er herausgefiltert, wenn wir die Klausel HAVING hinzufügen. Weitere Beispiele finden Sie in unserem Artikel über HAVING vs. WHERE in SQL: Was Sie wissen sollten. WHERE und GROUP BY - Wie geht es jetzt weiter? Gute Arbeit! Sie haben die grundlegenden Kenntnisse erworben, die Sie benötigen, um WHERE und GROUP BY Klauseln in SQL zu kombinieren. Sie haben den Unterschied zwischen WHERE und HAVING kennengelernt. Noch wichtiger ist, dass Sie alle drei Klauseln miteinander kombinieren können, um Daten nach Ihren Bedürfnissen zu filtern und zu aggregieren. Sie haben zwei weitere Tools zu Ihrem Toolkit hinzugefügt und sind bereit, sie zu verwenden. Eine gute Möglichkeit, das Gelernte zu vertiefen, ist unser interaktiver Kurs SQL für Anfänger. Übung macht den Meister! Schauen Sie sich auch alle unsere anderen großartigen Artikel an. Tags: GROUP BY