Latest web development tutorials

MySQL GROUP BY-Anweisung

GROUP BY-Anweisung basierend auf einer oder mehreren Spalten in der Ergebnismenge in Gruppen.

In der Spalte Gruppierung können wir COUNT, SUM, AVG, und andere Funktionen nutzen.

GROUP BY-Syntax

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Beispiele Demo

Beispiele dieses Kapitels die folgende Tabellenstruktur und Daten zu verwenden, bevor wir mit den folgenden Daten in die Datenbank beginnen kann.

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
  `id` int(11) NOT NULL,
  `name` char(10) NOT NULL DEFAULT '',
  `date` datetime NOT NULL,
  `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

Nach dem Import erfolgreich ist, führen Sie die folgende SQL-Anweisung:

mysql> set names utf8;
mysql> SELECT * FROM employee_tbl;
+----+--------+---------------------+--------+
| id | name   | date                | singin |
+----+--------+---------------------+--------+
|  1 | 小明 | 2016-04-22 15:25:33 |      1 |
|  2 | 小王 | 2016-04-20 15:25:47 |      3 |
|  3 | 小丽 | 2016-04-19 15:26:02 |      2 |
|  4 | 小王 | 2016-04-07 15:26:14 |      4 |
|  5 | 小明 | 2016-04-11 15:26:40 |      4 |
|  6 | 小明 | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)

Als nächstes benutzen wir die GROUP BY-Anweisung an die Datentabelle Gruppe mit Namen, und zählt die Anzahl der Datensätze für jede Person:

mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

Verwenden Sie WITH ROLLUP

WITH ROLLUP kann auf der Grundlage der statistischen Daten in dem Paket und dann einer auf die gleiche Statistik (SUM, AVG, COUNT ...) realisiert werden.

Zum Beispiel werden wir mehr als eine Datentabelle Gruppe mit Namen, und dann die Anzahl der Male, jede Person zählen, die registriert ist:

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | singin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL   |           16 |
+--------+--------------+
4 rows in set (0.00 sec)

NULL zeigt an, welcher Datensatz alle Login-Versuche.

Wir können coalesce verwenden, um einen Ersatz NULL Namen zu setzen, verschmelzen Syntax:

select coalesce(a,b,c);

Parameter Beschreibung :! Wenn ein == null, dann b wählen, wenn b == null, dann c wählen, wenn a = null, dann wählen Sie, wenn abc null sind, null zurück (die bedeutungslos).

Das folgende Beispiel, wenn der Name leer ist, die wir verwenden, anstatt der Gesamtzahl:

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | singin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)