¿Grupo de suma MySQL por uso? Explicación detallada del grupo por conteo en la base de datos MySQL

MySQL ¿Sumar grupo por uso?base de datos mysqlExplicación detallada del grupo por conteo

MySQL declaración GROUP BY

La instrucción GROUP BY agrupa el conjunto de resultados en función de una o más columnas.

En la columna agrupada podemos usar las funciones COUNT, SUM, AVG, etc.

GRUPO POR sintaxis

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

Ejemplo de demostración

El ejemplo de este capítulo utiliza la siguiente estructura de tabla y datos. Antes de usarla, podemos importar los siguientes datos a la base de datos.

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;

Después de que la importación sea exitosa, ejecute la siguiente instrucción SQL:

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)

A continuación, usamos la declaración GROUP BY para agrupar la tabla de datos por nombre y contar cuántos registros tiene cada persona:

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

Usar CON ROLLUP

WITH ROLLUP puede implementar las mismas estadísticas (SUM, AVG, COUNT...) sobre la base de estadísticas agrupadas.

Por ejemplo, agrupamos la tabla de datos anterior por nombre y luego contamos la cantidad de veces que cada persona ha iniciado sesión:

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)

El registro NULL representa el número de inicios de sesión para todos.

Podemos usar coalesce para establecer un nombre que pueda reemplazar NUll, coalesce sintaxis:

select coalesce(a,b,c);

Descripción del parámetro: si a==null, elija b; si b==null, elija c; si a!=null, elija a; si abc es nulo, devuelva nulo (sin sentido).

En el siguiente ejemplo, si el nombre está vacío, usamos el total en su lugar:

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)

发表 评论

Su dirección de correo electrónico no será publicada. 项 已 用 * 标注

Ir al Inicio