Die GROUP BY-Anweisung gruppiert die Ergebnismenge basierend auf einer oder mehreren Spalten.
Wir können Funktionen wie COUNT, SUM, AVG usw. für gruppierte Spalten verwenden.
GROUP BY-Syntax
SELECT Spaltenname,Funktion(Spaltenname)FROM Tabellenname
WHERE Spaltenname-Operatorwert
GROUP BY Spaltenname;
Beispieldemonstration
Die Beispiele in diesem Kapitel verwenden die folgende Tabellenstruktur und Daten. Vor der Verwendung können wir die folgenden Daten in die Datenbank importieren.
MariaDB [RUNOOB]> SET NAMES utf8;Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 0;Abfrage OK, 0 Zeilen betroffen ( 0,00 Sek.)
MariaDB [RUNOOB]> DROP TABLE IF EXISTS `employee_tbl`;Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.)MariaDB [RUNOOB]> CREATE TABLE `employee_tbl` (
-> `id` int(11) NOT NULL,
-> `name` char(10) NOT NULL DEFAULT '',
-> > `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Anzahl der Anmeldungen',
-> PRIMARY KEY (`id`)
-> Abfrage OK, 0 Zeilen betroffen (0,04 Sek.)
MariaDB [RUNOOB]> Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MariaDB [RUNOOB]> ( '1', 'aa', '2016-04-22 15:25:33', '1'), ('2', 'bb', '2016-04-20 15:25:47', ' 3 '), ('3', 'cc', '2016-04-19 15:26:02', '2'), ('4', 'bb', '2016-04-07 15:26: 14 ', '4'), ('5', 'aa', '2016-04-11 15:26:40', '4'), ('6', 'aa', '2016-04-04 15 :26:54', '2');Abfrage OK, 6 Zeilen betroffen, 6 Warnungen (0,00 Sek.)
Datensätze: 6 Duplikate: 0 Warnungen: 6
MariaDB [RUNOOB]> ; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 1;Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
|. name |
+----+------+-- --------------+--------+
| 2016-04-22 15:25:33 |
|. 2016-04-20 15:25:47 |. 2016-04-19 15:26:02 |. bb | 2016-04-07 15:26:14 |. 2016-04-11 15:26:40 |. 2016-04-04 15:26 :54 |. 2 |
+----+------+---------------------+------- -+
6 Zeilen im Satz (0,00 Sek.)
Als nächstes verwenden wir die GROUP BY-Anweisung, um die Datentabelle nach Namen zu gruppieren und zu zählen, wie viele Datensätze jede Person hat:
MariaDB [ RUNOOB]> SELECT name, COUNT(*) FROM Employee_tbl GROUP BY name;+------+
|
| bb | +--- ---+----------+
3 Reihen im Satz (0,00 Sek.)
Mit ROLLUP verwenden
MIT ROLLUP um eine Gruppierung zu erreichen Basierend auf den statistischen Daten werden die gleichen Statistiken (SUM, AVG, COUNT ...) durchgeführt.
Zum Beispiel gruppieren wir die obige Datentabelle nach Namen und zählen dann, wie oft sich jede Person anmeldet:
MariaDB [RUNOOB]> singin_count FROM Employee_tbl GROUP BY name WITH ROLLUP;+-------------+
|. 7 |
| >+-- ----+--------------+4 Zeilen im Satz (0,00 Sek.)
Der Datensatz NULL stellt die Zahl dar von Logins für alle.
Wir können „coalesce“ verwenden, um einen Namen festzulegen, der die NUll-Syntax ersetzen kann:
select „coalesce(a,b,c);“
Parameterbeschreibung:
Wenn a!=null, wählen Sie a;
MariaDB [RUNOOB]> SELECT colonesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;+------------------------+ --------------+
| merge(name, '总数') | singin_count |
+------------------------+--------------+
| aa | 7 |
| bb | 7 |
| cc | 2 |
| 总数 | 16 |
+----------+----------------------------+
4 Zeilen im Satz (0,00 Sek.)