Grupo de soma do MySQL por uso? Explicação detalhada do grupo por contagem no banco de dados MySQL

MySQL Soma grupo por uso?banco de dados MySQLExplicação detalhada do grupo por contagem

Instrução GROUP BY do MySQL

A instrução GROUP BY agrupa o conjunto de resultados com base em uma ou mais colunas.

Na coluna agrupada podemos usar as funções COUNT, SUM, AVG, etc.

Sintaxe GROUP BY

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

Exemplo de demonstração

O exemplo deste capítulo usa a estrutura e os dados da tabela a seguir. Antes de usá-los, podemos importar os seguintes dados para o banco de dados.

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;

Após a importação ser bem-sucedida, execute a seguinte instrução 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)

Em seguida, usamos a instrução GROUP BY para agrupar a tabela de dados por nome e contar quantos registros cada pessoa possui:

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

Usar COM ROLLUP

WITH ROLLUP pode implementar as mesmas estatísticas (SUM, AVG, COUNT...) com base em estatísticas agrupadas.

Por exemplo, agrupamos a tabela de dados acima por nome e contamos o número de vezes que cada pessoa fez login:

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)

O registro NULL representa o número de logins para todos.

Podemos usar coalesce para definir um nome que pode substituir NUll, sintaxe coalesce:

select coalesce(a,b,c);

Descrição do parâmetro: se a==null, escolha b; se b==null, escolha c; se a!=null, escolha a; se abc for nulo, retorne nulo (sem sentido).

No exemplo a seguir, se o nome estiver vazio, usamos o 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)

发表 评论

Seu endereço de e-mail não será publicado. 必填 项 已 用 * 标注

Voltar ao Topo