Zurück zur Artikelliste Artikel
7 Leseminuten

Der Unterschied zwischen GROUP BY und ORDER BY in einfachen Worten

Wer SQL lernt, kommt am häufigsten beim Erlernen des Befehls GROUP BY ins Stocken. GROUP BY und ORDER BY sind zwei wichtige Schlüsselwörter in SQL, die wir zur Organisation von Daten verwenden. Der Unterschied zwischen GROUP BY und ORDER BY besteht darin, dass ORDER BY einfacher ist als GROUP BY und normalerweise zu Beginn eines SQL-Kurses eingeführt wird.

Manchmal sind die Leute ziemlich verwirrt über diese beiden Konzepte (SQL ORDER BY vs. GROUP BY), und der Grund für diese Verwirrung ist ein mangelndes Verständnis der beiden Konzepte. Obwohl beide Konzepte dazu dienen, Daten auf der Grundlage ihrer Werte zu ordnen, unterscheiden sich ihre Anwendungsfälle erheblich voneinander. Wenn wir diese beiden Konzepte richtig lernen, wird sich die Verwirrung von selbst lösen.

In diesem Artikel habe ich eine interessante Datenbank verwendet, die hier veröffentlicht wurde. Der Datensatz enthält mehr als 2000 Craft-Biere und 500 Brauereien, die in den Vereinigten Staaten verwendet werden. Die Daten sind in CSV-Dateien enthalten, die Sie mit einem GUI-Tool leicht in jede Ihrer Datenbanken importieren können. Einer meiner Kollegen hat dies in einem Beispiel für die Umfragedaten von LearnSQL gezeigt.

Es gibt zwei Tabellen in diesem Datensatz: beers und breweries. Schauen wir uns den Beispieldatensatz aus der beers Tabelle, um ein besseres Bild davon zu bekommen.

Tabelle "Biere

ORDER BY

Unser erstes Thema ist ORDER BY. Bevor wir versuchen, den Unterschied zwischen GROUP BY und ORDER BY zu verstehen, wollen wir uns ansehen, wie der Befehl SELECT funktioniert.

SELECT den Namen, die Stadt und das Bundesland aus jedem Datensatz in der breweries Tabelle.

SELECT name, 
 city, 
 state 
FROM breweries

Wenn Sie den obigen Befehl ausführen, erhalten Sie etwa die folgende Darstellung:

SELECT den Namen, die Stadt und das Bundesland aus der Tabelle Brauereien

Wie Sie sehen können, sind die Ergebnisse nicht nach ihren Namen geordnet. Die Standardreihenfolge für eine SELECT -Anweisung ist nicht-deterministisch, d. h. die Reihenfolge der Ergebnisse kann sich jederzeit ändern, wenn Sie Ihren Code ausführen.

Eine nicht-deterministische Reihenfolge ist jedoch normalerweise nicht das, was wir wollen. Angenommen, Sie möchten die Ergebnisse nach der auf- oder absteigenden Reihenfolge der Spalte state sortieren. In diesem Fall benötigen Sie den Befehl ORDER BY. Sie müssen lediglich die Klausel ORDER BY wie folgt verwenden:

SELECT name, 
city, 
state 
FROM 	breweries 
ORDER BY state ASC
ORDER BY

In ähnlicher Weise können Sie auch Ergebnisse in absteigender Reihenfolge des Bundeslandes erhalten.

SELECT name, 
city, 
state 
FROM breweries
ORDER BY state DESC
absteigende Reihenfolge

Sie können die Datensätze in absteigender Reihenfolge nach Bundesland sortiert sehen. Die Standardreihenfolge des Befehls ORDER BY ist aufsteigend. Wenn Sie also ASC oder DESC nicht verwendet haben, werden die Ergebnisse in aufsteigender Reihenfolge angezeigt.

Sie können ORDER BY in zwei oder mehr Spalten verwenden. Prüfen Sie die folgende Abfrage:

SELECT name, 
 city, 
 state 
FROM breweries
ORDER BY state,
         city DESC

Diese Abfrage ordnet die Ergebnisse zunächst in der aufsteigenden Reihenfolge des Bundeslandes, gefolgt von der absteigenden Reihenfolge der Stadt.

ORDER BY

Interessant ist nun, dass jemand, der mit GROUP BY nicht viel anzufangen weiß, ORDER BY zur Datenanalyse verwenden kann. Nehmen wir zum Beispiel an, Sie möchten herausfinden, wie viele Brauereien es in einem bestimmten state gibt. Sie könnten die Ergebnisse nach Bundesländern sortiert abrufen. So erhalten Sie ein schön gruppiertes Ergebnis, aus dem Sie manuell die Anzahl der Brauereien in einem bestimmten state zählen können.

Daher könnte jemand, der sich mit GROUP BY nicht auskennt, denken, dass ORDER BY eine hervorragende Möglichkeit ist, dieselben Daten zu gruppieren. Dieser Gedanke ist nicht falsch. Wenn Sie Daten in einer schönen gruppierten Form anzeigen möchten, ist ORDER BY eine gute Wahl.

GROUP BY ist keine Möglichkeit, Daten in Gruppen darzustellen, sondern eher eine Möglichkeit, Daten in Gruppen zu analysieren. Um SQL ORDER BY im Vergleich zu GROUP BY besser zu verstehen, schauen wir uns GROUP BY genauer an.

GROUP BY

In den meisten Texten wird GROUP BY als eine Art der Aggregation von Datensätzen nach den angegebenen Spalten definiert, die es Ihnen ermöglicht, Aggregationsfunktionen für nicht gruppierte Spalten (wie SUM, COUNT, AVG, usw.) durchzuführen. Mit anderen Worten, der Zweck der GROUP BY Klausel ist es, eindeutige Kombinationen von Spaltenwerten zusammenzufassen.

Ein paar Beispiele sollen dies verdeutlichen:

Gruppieren wir die beers Tabelle anhand der Spalte style.

SELECT style 
FROM beers 
GROUP BY style

Die obige SQL-Abfrage erzeugt die folgende Ausgabe

ORDER BY

Schauen wir uns also an, was hier passiert ist. Diese Abfrage hat für jeden Wert von style ein Ergebnis geliefert. Das bedeutet, dass SQL zunächst Gruppen aus denselben style Werten bildet und eine Zeile zurückgibt, die die Gruppe repräsentiert.

Und was ist die genaue Verwendung von GROUP BY? Natürlich können Sie GROUP BY verwenden, um unterschiedliche Werte zu finden. Aber SQL hat ein DISTINCT Schlüsselwort speziell für diesen Zweck. Die eigentliche Bedeutung von GROUP BY wird deutlich, wenn Sie es mit Aggregatfunktionen wie SUM(), COUNT() verwenden. Um dies besser zu verstehen, führen Sie die folgende SQL-Abfrage aus:

SELECT style, 
 COUNT(Name) 
FROM beers 
GROUP BY style

Sie wird das folgende Ergebnis liefern:

ORDER BY

Hier gruppiert SQL zunächst die Ergebnisse auf der Grundlage der Spalte style. Dann wird geprüft, wie viele Namen in jeder Gruppe enthalten sind, und die Werte von style sowie die Anzahl der Namen für jeden Stil werden zurückgegeben.

Wenn Sie genau hinsehen, werden Sie feststellen, dass die Ergebnisse bereits in aufsteigender Reihenfolge angeordnet sind. Dies führt gelegentlich zu der Annahme, dass GROUP BY die Ergebnisse sortiert. In Wirklichkeit gibt es keine Garantie, dass GROUP BY die Ergebnisse in aufsteigender Reihenfolge anzeigt. Wenn Sie die Ergebnisse in einer bestimmten Reihenfolge benötigen, müssen Sie dies wie unten beschrieben selbst tun:

SELECT style, 
COUNT(Name) 
FROM beers 
GROUP BY style 
ORDER BY style

Daher funktioniert GROUP BY sehr gut zusammen mit ORDER BY.

Jetzt wissen Sie, wie Sie GROUP BY verwenden können, um eine Reihe von Werten zu zählen, die zu einer bestimmten Gruppe gehören. Ich werde Ihnen zwei weitere Beispiele aus der Praxis geben, um die Verwendung von GROUP BY zu verstehen.

  1. Stellen Sie sich eine Angestelltentabelle vor, in der Sie Informationen über die Angestellten speichern, z. B. ihren Namen, ihre Funktion und ihr Gehalt. Jeder Mitarbeiter gehört zu einer anderen Abteilung, z. B. Finanzen, IT oder Transport. Nehmen wir nun an, Sie möchten die Summe der Gehälter ermitteln, die Sie den Mitarbeitern auf der Grundlage ihrer Abteilung gezahlt haben. Dazu müssen Sie einen SQL-Befehl wie unten ausführen:

    SELECT department,
     SUM(salary) 
    FROM employee 
    GROUP BY department
    
  2. Angenommen, Sie haben eine eCommerce-Website, die mehrere Produkttypen verkauft. In Ihrer Datenbank haben Sie eine Tabelle, in der Sie Informationen über Bestände speichern. Wenn Sie die Anzahl der einzelnen Produkttypen ermitteln möchten, können Sie die Aggregatfunktion GROUP BY mit COUNT verwenden:

    SELECT product_type, 
     COUNT(product_id) 
    FROM stock
    GROUP BY product_type
    

Gehen wir in dieser Lektion noch einen Schritt weiter, um Ihr Wissen über GROUP BY zu erweitern. Sie können Ergebnisse auch anhand von zwei Spalten gruppieren. Gruppieren wir zum Beispiel die beers Tabelle auf der Grundlage von style und brewery_id.

SELECT style,
 brewery_id,
 COUNT(Name) 
FROM beers 
GROUP BY style,
   brewery_id

Diese SQL-Abfrage unterteilt die Gruppen style mit brewery_id weiter. Wenn Sie sie ausführen, erhalten Sie das folgende Ergebnis:

ORDER BY

Schlussfolgerung

In diesem Artikel habe ich den Unterschied zwischen ORDER BY und GROUP BY erklärt. ORDER BY sortiert Daten auf der Grundlage der Daten einer Spalte. Als Ergebnis der Sortierung werden natürlich Daten mit denselben Werten in einer Gruppe zusammengefasst, was Ihnen später die manuelle Analyse erleichtert. Aber GROUP BY ist der SQL-Weg, um ähnliche Daten zu analysieren.

Ohne Aggregationsfunktionen ist GROUP BY nicht wirklich zu gebrauchen. Manchmal kann GROUP BY Ergebnisse in sortierter Reihenfolge zurückgeben, aber Sie sollten sich nicht darauf verlassen. Die Reihenfolge, in der die Ergebnisse zurückgegeben werden, ist nicht deterministisch und hängt davon ab, wie die Datenbankmaschine die Abfrage ausführt.

Nach der Lektüre dieses Artikels sollten Sie in der Lage sein, GROUP BY und ORDER BY mit mehr Vertrauen zu verwenden. Wenn Sie Ihr Wissen über SQL ORDER BY vs. GROUP BY vertiefen möchten, schauen Sie sich dieses Übungsset an - es enthält einen speziellen Abschnitt zu diesem Thema.