Was ist der Unterschied zwischen GROUP BY und ORDER BY in SQL?

119

Wann verwenden Sie welche im Allgemeinen? Beispiele sind ausdrücklich erwünscht!

Ich beziehe mich also auf MySql, kann mir aber nicht vorstellen, dass das Konzept auf einem anderen DBMS anders ist

vehomzzz
quelle

Antworten:

79

ORDER BY ändert die Reihenfolge, in der Artikel zurückgegeben werden.

GROUP BY aggregiert Datensätze nach den angegebenen Spalten, sodass Sie Aggregationsfunktionen für nicht gruppierte Spalten (wie SUM, COUNT, AVG usw.) ausführen können.

CMerat
quelle
130
Diese Aussage macht ohne ein begleitendes Beispiel praktisch keinen Sinn.
John Merlino
2
Ich denke, das zweite Beispiel auf der Seite im Link reicht aus, um den Unterschied zu verstehen. tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002
Können Sie bitte ein Beispiel nennen?
Reis
249

ORDER BY ändert die Reihenfolge, in der Artikel zurückgegeben werden.

GROUP BY aggregiert Datensätze nach den angegebenen Spalten, sodass Sie Aggregationsfunktionen für nicht gruppierte Spalten (wie SUM, COUNT, AVG usw.) ausführen können.

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter
RiddlerDev
quelle
2
Was ist, wenn die Tabelle eine ageSpalte enthält, wobei Peters ein unterschiedliches Alter hat und die Abfrage SELECT NAME, AGE FROM TABLE GROUP BY NAME lautet?
Varun
1
Sie können keine Spalten zurückgeben, die nicht zu Ihrer Gruppe gehören oder über eine Methode verfügen. Sie müssten also entweder das Alter zur Gruppe hinzufügen oder etwas wie Max (Alter) tun.
RiddlerDev
77

ORDER BY: Sortieren Sie die Daten in aufsteigender oder absteigender Reihenfolge.

Betrachten Sie die Tabelle CUSTOMERS :

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Das folgende Beispiel zeigt das Ergebnis in aufsteigender Reihenfolge nach NAME:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Dies würde das folgende Ergebnis erzeugen:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GROUP BY: Ordnen Sie identische Daten in Gruppen an.

Die Tabelle CUSTOMERS enthält jetzt die folgenden Datensätze mit doppelten Namen:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Wenn Sie identische Namen zu einem einzigen Namen gruppieren möchten, lautet die GROUP BY-Abfrage wie folgt:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Dies würde das folgende Ergebnis ergeben: (Bei identischen Namen würde der letzte ausgewählt und schließlich die Spalte in aufsteigender Reihenfolge sortiert.)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

wie Sie gefolgert haben, dass es ohne SQL-Funktionen wie sum, avg etc .. keinen Nutzen hat.

Gehen Sie diese Definition durch, um die ordnungsgemäße Verwendung von GROUP BY zu verstehen:

Eine GROUP BY-Klausel verarbeitet die von einer Abfrage zurückgegebenen Zeilen, indem identische Zeilen in einer einzelnen / eindeutigen Gruppe zusammengefasst werden, und gibt eine einzelne Zeile mit der Zusammenfassung für jede Gruppe zurück, indem die entsprechende Aggregatfunktion in der SELECT-Liste verwendet wird, z. B. COUNT (), SUM (), MIN (), MAX (), AVG () usw.

Wenn Sie nun den Gesamtlohn für jeden Kunden (Namen) wissen möchten, lautet die GROUP BY-Abfrage wie folgt:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

Dies würde das folgende Ergebnis ergeben: (Summe der Gehälter mit identischen Namen und Sortieren der Spalte NAME nach Entfernen identischer Namen)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+
JerryGoyal
quelle
25

Der Unterschied ist genau das, was der Name impliziert: Eine Gruppe nach führt eine Gruppierungsoperation aus und eine Reihenfolge nach Sortierung.

Wenn Sie dies tun SELECT * FROM Customers ORDER BY Name, wird die Ergebnisliste nach dem Namen des Kunden sortiert.

Wenn Sie dies tun, erhalten SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActiveSie eine Anzahl aktiver und inaktiver Kunden. Die Gruppe aggregierte die Ergebnisse basierend auf dem von Ihnen angegebenen Feld.

Max Schmeling
quelle
3
Außerdem: Wenn Sie GRUPPIEREN, werden die Ergebnisse nicht unbedingt sortiert. Obwohl sie in vielen Fällen in einer intuitiven Reihenfolge erscheinen, wird dies durch die GROUP-Klausel nicht garantiert. Wenn Sie möchten, dass Ihre Gruppen sortiert werden, verwenden Sie nach GROUP BY immer ein explizites ORDER BY.
Dave Costa
16

Sie haben eine völlig andere Bedeutung und sind überhaupt nicht wirklich verwandt.

Mit ORDER BY können Sie die Ergebnismenge nach verschiedenen Kriterien sortieren, z. B. zuerst nach Namen von az sortieren und dann nach dem höchsten bis niedrigsten Preis sortieren.

(BESTELLEN NACH Name, Preis DESC)

Mit GROUP BY können Sie Ihre Ergebnismenge in logische Gruppen gruppieren und dann aggregierte Abfragen für diese Gruppen ausführen. Sie können beispielsweise alle Mitarbeiter auswählen, sie nach ihrem Arbeitsplatz gruppieren und das Durchschnittsgehalt aller Mitarbeiter jedes Arbeitsplatzes berechnen.

PatrikAkerstrand
quelle
8

Einfach, ORDER BYordnet die Daten und GROUP BYGruppen an oder kombiniert die Daten.

ORDER BY ordnet die Ergebnismenge gemäß dem genannten Feld standardmäßig in aufsteigender Reihenfolge an.

Angenommen, Sie lösen eine Abfrage aus, da ORDER BY (student_roll_number)dies zu einer aufsteigenden Reihenfolge der Rollennummern der Schüler führt. Hier,student_roll_number Eingabe mehrmals erfolgen.

In diesem GROUP BYFall verwenden wir dies mit Aggregatfunktionen und gruppieren die Daten gemäß der Aggregatfunktion, und wir erhalten das Ergebnis. Wenn hier unsere Abfrage hat SUM (marks)zusammen mit GROUP BY (student_first_name)ihm wird die Summe der Noten der Schüler zeigen zu jeder Gruppe gehören (in der alle Mitglieder einer Gruppe die gleichen Vornamen haben).

Swapnil Chincholkar
quelle
4

GROUP BY wird verwendet, um Zeilen in einer Auswahl zu gruppieren, normalerweise beim Aggregieren von Zeilen (z. B. Berechnen von Summen, Durchschnittswerten usw. für eine Reihe von Zeilen mit denselben Werten für einige Felder).

ORDER BY wird verwendet, um die Zeilen zu ordnen, die aus einer select-Anweisung resultieren.

Cătălin Pitiș
quelle
4

Einige gute Beispiele dort. Ich möchte nur mein eigenes aus dem Webcheatsheet hinzufügen, das gute, klare Beispiele enthält, und Sie können Ihr eigenes SQL ausführen.

SQL Order By

SQL Group By

Kevchadders
quelle
1

ORDER BYzeigt ein Feld in aufsteigender oder absteigender Reihenfolge. Während GROUP BYzeigt die gleichen Feldnamen, IDs usw. in nur einer Ausgabe.

Im_khan
quelle
4
Diese Antwort enthält keine zusätzlichen Informationen, die in der akzeptierten Antwort oder einer anderen gegebenen Antwort noch nicht angegeben sind.
Newfurniturey
1
  1. GROUP BY aggregiert Datensätze nach der angegebenen Spalte, sodass Sie Aggregationsfunktionen für nicht gruppierte Spalten (wie SUM, COUNT, AVG usw.) ausführen können. ORDER BY ändert die Reihenfolge, in der Artikel zurückgegeben werden.
  2. Wenn Sie SELECT IsActive, COUNT (*) FROM Customers GROUP BY IsActive auswählen, erhalten Sie eine Anzahl aktiver und inaktiver Kunden. Die Gruppe aggregierte die Ergebnisse basierend auf dem von Ihnen angegebenen Feld. Wenn Sie SELECT * FROM Customers ORDER BY Name ausführen, wird die Ergebnisliste nach dem Namen des Kunden sortiert.
  3. Wenn Sie GRUPPIEREN, werden die Ergebnisse nicht unbedingt sortiert. Obwohl sie in vielen Fällen in einer intuitiven Reihenfolge erscheinen, wird dies durch die GROUP-Klausel nicht garantiert. Wenn Sie möchten, dass Ihre Gruppen sortiert werden, verwenden Sie nach GROUP BY immer ein explizites ORDER BY.
  4. Gruppierte Daten können nicht nach der WHERE-Klausel gefiltert werden. Bestelldaten können durch die WHERE-Klausel gefiltert werden.
Khadija
quelle
0

Es sollte beachtet werden, dass dies GROUP BYnicht immer erforderlich ist, da Sie (zumindest in PostgreSQL und wahrscheinlich in anderen SQL-Varianten) ORDER BYeine Liste verwenden können und diese weiterhin ASCoder DESC pro Spalte verwenden können ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
John
quelle