Eine kurze Erläuterung zu „Group By“ in MySQL

Eine kurze Erläuterung zu „Group By“ in MySQL

1. Einleitung

Mit group by von MySQL werden abgefragte Daten gruppiert. Darüber hinaus bietet MySQL having , um die Daten innerhalb der Gruppe zu filtern.

MySQL bietet viele Schlüsselwörter select -Klauseln.

Ihre Reihenfolge in der Anweisung ist wie folgt:

Klauseln Wirkung Ist es notwendig/wann zu verwenden
wählen Abfrage der zurückzugebenden Daten oder Ausdrücke Ja
aus Geben Sie die abzufragende Tabelle an NEIN
Wo Festlegen der Filterung auf Zeilenebene NEIN
Gruppieren nach Gruppierung Nein/Beim Gruppieren von Daten verwenden
haben Paketfilterung Nein/Verwenden, um die gruppierten Daten zu filtern
Bestellen bis Angeben von Sortierregeln bei der Datenrückgabe NEIN
Limit Geben Sie die Anzahl der zurückzugebenden Zeilen an NEIN

2. Bereiten Sie die Benutzertabelle vor

Bereiten Sie eine Benutzertabelle vor, deren DDL und Tabellendaten wie folgt sind

Namen festlegen utf8mb4;
Setzen Sie FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Tabellenstruktur für Benutzer
-- ----------------------------
DROP TABLE, WENN `Benutzer` EXISTIERT;
CREATE TABLE `Benutzer` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Benutzername',
  `Nation` varchar (255) Zeichensatz utf8 Sortierung utf8_general_ci NULL Standard NULL Kommentar 'Ethnie',
  `Alter` int(11) NULL DEFAULT NULL COMMENT 'Alter',
  `Höhe` double NULL DEFAULT NULL KOMMENTAR 'Höhe',
  `sex` smallint(6) NULL DEFAULT NULL COMMENT 'Geschlecht',
  PRIMÄRSCHLÜSSEL (`id`) MIT BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamisch;

-- ----------------------------
-- Aufzeichnungen des Benutzers
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Benutzername', 'Benutzer', 18, 180, 1);
INSERT INTO `user` VALUES (2, 'Benutzer', 'Benutzer', 20, 175, 1);
INSERT INTO `user` VALUES (3, 'Benutzer', 'Uigurisch', 45, 168, 0);
INSERT INTO `user` VALUES (4, 'Benutzer', 'Benutzerprofil', 18, 177, 1);
INSERT INTO `user` VALUES (5, 'Benutzer', 'Benutzer', 16, 184, 0);
INSERT INTO `user` VALUES (6, 'Benutzer', 'Uygur', 27, 192, 1);

Die Daten in der Benutzertabelle sind wie folgt:

mysql> wähle * vom Benutzer aus;
+----+--------+----------+------+--------+------+
| ID | Name | Nation | Alter | Größe | Geschlecht |
+----+--------+----------+------+--------+------+
| 1 | Li Ziba | Han-Nationalität | 18 | 180 | 1 |
| 2 | Zhang San | Hui-Nationalität | 20 | 175 | 1 |
| 3 | Li Si | Uigurisch | 45 | 168 | 0 |
| 4 | Wang Wu | Mongolisch | 18 | 177 | 1 |
| 5 | Zhao Liu | Han-Nationalität | 16 | 184 | 0 |
| 6 | Tianqi | Uigurisch | 27 | 192 | 1 |
+----+--------+----------+------+--------+------+
6 Zeilen im Satz (0,00 Sek.)

2.1 Gruppieren nach Regeln

Bevor Sie group by müssen Sie die relevanten group by

  • group by -Klausel wird nach where und vor order by -Klausel platziert.
  • having -Klausel wird nach der Group By-Klausel und vor der Order By-Klausel platziert.
  • Jede Spalte in group by -Klausel muss eine Auswahlspalte oder ein gültiger Ausdruck sein. Aggregatfunktionen können nicht verwendet werden.
  • Der in select verwendete Ausdruck muss in der Group-By-Klausel erscheinen und darf keine Aliase verwenden.
  • Die group by Daten enthalten Nullwerte und die Nullwerte werden in einer Gruppe zusammengefasst.
  • group by -Klausel kann verschachtelt werden und die verschachtelten Gruppen werden in der letzten Gruppe zusammengefasst.

2.2 Verwendung von group by

brauchen:

Zählen Sie die Anzahl der Benutzer verschiedener Nationalitäten

Stellungnahme:

mysql> Nation auswählen, Anzahl(*) aus Benutzergruppe nach Nation;
+----------+----------+
| Nation | Anzahl(*) |
+----------+----------+
| Han-Nationalität| 2 |
| Hui-Nationalität| 1 |
| Uigurisch | 2 |
| Mongolisch| 1 |
+----------+----------+
4 Zeilen im Satz (0,00 Sek.)

GROUP BY kann in Verbindung mit where verwendet werden, aber where kann nicht zum Filtern nach group by verwendet werden. Nach Verwendung der where Klausel sind die gruppierten Daten der durch die WHERE-Klausel gefilterte Datensatz.

mysql> Nation auswählen, Anzahl(*) als Nation_Nummer vom Benutzer, wobei Geschlecht = 0, nach Nation gruppieren;
+----------+------------+
| Nation | Nationennummer |
+----------+------------+
| Uigurisch | 1 |
| Han-Nationalität| 1 |
+----------+------------+
2 Zeilen im Satz (0,00 Sek.)

2.3 Verwendung von

Wenn die Daten nach der Gruppierung group by „group by“ erneut gefiltert werden müssen, muss having -Klausel verwendet werden. Der MySQL-Server löst eine Ausnahme aus, wenn die Where-Klausel nach group by -Klausel verwendet wird

mysql> wähle Nation, Anzahl(*) als Nation_Nummer aus der Benutzergruppe nach Nation, wobei Nation = 'Nation';
FEHLER 1064 (42000): Ihre SQL-Syntax weist einen Fehler auf. Überprüfen Sie im Handbuch zu Ihrer MySQL-Serverversion die richtige Syntax für die Verwendung in der Nähe von „where nation = '汉族'' in Zeile 1.


An dieser Stelle müssen Sie nur die obige where-Klausel durch die having-Klausel ersetzen. having -Klausel unterstützt alle where Operatoren. Einfach ausgedrückt kann die where-Klausel nur nach group by -Klausel verwendet werden, wenn sie durch having

vmysql> wähle Nation, zähle(*) als Nation_num aus der Benutzergruppe nach Nation mit Nation = 'Nation';
+--------+------------+
| Nation | Nationennummer |
+--------+------------+
| Han-Nationalität| 2 |
+--------+------------+
1 Zeile im Satz (0,00 Sek.)

2.4 Sortieren nach und Limit

Wenn die gruppierten Daten sortiert werden müssen, können Sie order by verwenden. order by “-Klausel muss nach having “-Klausel stehen.

mysql> wähle Nation, zähle(*) als Nation_Nummer aus der Benutzergruppe nach Nation mit Nation != 'Nation', sortiert nach Nation_Nummer, absteigend;
+----------+------------+
| Nation | Nationennummer |
+----------+------------+
| Uigurisch | 2 |
| Hui-Nationalität| 1 |
| Mongolisch| 1 |
+----------+------------+
3 Zeilen im Satz (0,00 Sek.)

Wenn Sie die Anzahl der Zeilen angeben müssen, die für die Ausgabeergebnisse zurückgegeben werden sollen, können Sie limit verwenden. Die limit-Klausel steht am Ende der gesamten Anweisung.

mysql> wähle Nation, zähle(*) als Nation_Nummer aus der Benutzergruppe nach Nation mit Nation != 'Nation', sortiere nach Nation_Nummer, Abstiegslimit 2;
+----------+------------+
| Nation | Nationennummer |
+----------+------------+
| Uigurisch | 2 |
| Hui-Nationalität| 1 |
+----------+------------+
2 Zeilen im Satz (0,00 Sek.)

2,5 mit Rollup

In der Group-By-Klausel kann WITH ROLLUP dieselben Statistiken (SUM, AVG, COUNT...) basierend auf den gruppierten statistischen Daten durchführen.

Beispielsweise max():

mysql> wähle Nation, max(Höhe) als Nation_Num aus Benutzergruppe nach Nation mit Rollup;
+----------+------------+
| Nation | Nationennummer |
+----------+------------+
| Hui-Nationalität| 175 |
| Han-Nationalität| 184 |
| Uigurisch | 192 |
| Mongolisch | 177 |
| NULL | 192 |
+----------+------------+
5 Zeilen im Satz (0,00 Sek.)

Beispielsweise avg():

mysql> wähle Nation, Durchschnitt (Höhe) als Nation_Num aus Benutzergruppe nach Nation mit Rollup;
+----------+--------------------+
| Nation | Nationennummer |
+----------+--------------------+
| Hui-Nationalität| 175 |
| Han-Nationalität| 182 |
| Uigurisch | 180 |
| Mongolisch | 177 |
| NULL | 179.33333333333334 |
+----------+--------------------+
5 Zeilen im Satz (0,00 Sek.)

Beispielsweise count():

mysql> wähle Nation, Anzahl(*) als Nation_Num aus Benutzergruppe nach Nation mit Rollup;
+----------+------------+
| Nation | Nationennummer |
+----------+------------+
| Hui-Nationalität| 1 |
| Han-Nationalität| 2 |
| Uigurisch | 2 |
| Mongolisch| 1 |
| NULL | 6 |
+----------+------------+
5 Zeilen im Satz (0,00 Sek.)

Dies ist das Ende dieses Artikels über das Gruppieren nach in MySQL. Weitere Informationen zum Gruppieren nach in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So verwenden Sie den Abfrageausdruck GroupBy in C#
  • Detaillierte Erklärung der Group-By-Anweisung in der MySQL-Datenbankgruppenabfrage
  • Detaillierte Erläuterung der Nutzungsregeln von „group by“ in der Oracle-Gruppenabfrage
  • So verwenden Sie „groupby“ in einer Datentabelle für Gruppenstatistiken
  • Detaillierte Erklärung der Verwendung von „Gruppieren nach“

<<:  CSS realisiert die Realisierung der Hintergrundbild-Bildschirmanpassung

>>:  Detaillierte Erklärung von Softlinks und Hardlinks in Linux

Artikel empfehlen

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...

Detaillierte Erklärung des Ref-Attributs von Vue

Zusammenfassen Dieser Artikel endet hier. Ich hof...

MySQL 8.0 Upgrade-Erfahrung

Inhaltsverzeichnis Vorwort 1. Deinstallieren Sie ...

CentOS7 64-Bit-Installation MySQL Grafik-Tutorial

Voraussetzungen für die Installation von MySQL: I...

Einführung in gängige XHTML-Tags

<br />Ich habe festgestellt, dass viele Leut...

So erstellen Sie eine TAR-Datei von WSL über Docker

Ich habe kürzlich mit der Remote-Entwicklungsfunk...

Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Vertreter / egrep Syntax: grep [-cinvABC] 'wo...

Anwendung von HTML und CSS in Flash

Anwendung von HTML und CSS in Flash: Ich habe zufä...

Installations-Tutorial zur komprimierten Version von MySQL 8.0.11

In diesem Artikel finden Sie das Installations-Tu...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

Beispielcode zur Implementierung einer einfachen Suchmaschine mit MySQL

Inhaltsverzeichnis Vorwort Einführung Ngram-Vollt...