Latest web development tutorials

déclaration MySQL GROUP BY

GROUP BY basée sur une ou plusieurs colonnes dans le jeu de résultats en groupes.

Dans le regroupement de colonnes, nous pouvons utiliser COUNT, SUM, AVG, et d'autres fonctions.

GROUP BY Syntaxe

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

Exemples Démo

Des exemples de ce chapitre pour utiliser la structure de tableau suivant et les données, avant que nous puissions commencer à utiliser les données suivantes dans la base de données.

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;

Une fois l'importation réussie, exécutez l'instruction SQL suivante:

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)

Ensuite, nous utilisons le GROUP BY au groupe de la table de données par nom, et compte le nombre d'enregistrements pour chaque personne:

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

Utilisez WITH ROLLUP

WITH ROLLUP peut être mis en œuvre sur la base des données statistiques dans le paquet, puis soumis aux mêmes statistiques (SUM, AVG, COUNT ...).

Par exemple, nous serons données plus d'un groupe de table par nom, puis compter le nombre de fois que chaque personne qui est inscrite:

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 indique qui enregistrent toutes les tentatives de connexion.

Nous pouvons utiliser coalesce pour définir un nom Null de substitution, fusionner la syntaxe:

select coalesce(a,b,c);

Paramètre Description :! Si un null ==, puis sélectionnez b; si b == null, puis sélectionnez c; si un = null, puis choisissez un, si abc sont nuls, retourner null (le sens).

L'exemple suivant, si le nom est vide, nous utilisons à la place du nombre total:

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)