Regroupement MySQL


Instruction MySQL GROUP BY

L'instruction GROUP BY regroupe un ensemble de résultats en fonction d'une ou plusieurs colonnes.

Nous pouvons utiliser des fonctions telles que COUNT, SUM, AVG, etc. sur des colonnes groupées.

Syntaxe GROUP BY

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

Exemple de démonstration

L'exemple de ce chapitre utilise la structure de table et les données suivantes Avant. en l'utilisant, nous pouvons d'abord importer 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 l'instruction GROUP BY pour regrouper la table de données par nom et compter le nombre d'enregistrements de 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 AVEC ROLLUP

AVEC ROLLUP pour effectuer les mêmes statistiques (SUM, AVG, COUNT...) basées sur des données statistiques groupées.

Par exemple, nous regroupons le tableau de données ci-dessus par nom, puis comptons le nombre de fois de connexion pour chaque personne :

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)

L'enregistrement NULL représente le nombre de fois de connexion pour tout le monde.

Nous pouvons utiliser coalesce pour définir un nom qui peut remplacer la syntaxe de coalesce :

select coalesce(a,b,c);

Description du paramètre :

Si a==null, Sélectionnez ensuite b ; si b==null, puis sélectionnez c ; ​​si a!=null, puis sélectionnez a ; si a b c est nul, alors return est nul (sans signification).

Dans les exemples suivants, si le nom est vide, nous utilisons le nombre total à la place :

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)

Tutoriels vidéo associés recommandés :