mysql二次分组_MySQL分组
mysql⼆次分组_MySQL分组
【GROUP BY 语法】
SELECT column_name, function(column_name)分组名称大全
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
【实例演⽰】
本实例使⽤到了以下表结构及数据,使⽤前我们可以先将以下数据导⼊数据库中。
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;
导⼊成功后,执⾏以下 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)
接下来我们使⽤ GROUP BY 语句 将数据表按名字进⾏分组,并统计每个⼈有多少条记录:
mysql> SELECT name, COUNT(*) FROM  employee_tbl GROUP BY name;
+--------+----------+
| name  | COUNT(*) |
+--------+----------+
| ⼩丽 |        1 |
| ⼩明 |        3 |
| ⼩王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)
【使⽤ WITH ROLLUP】
WITH ROLLUP 可以实现在分组统计数据基础上再进⾏相同的统计(SUM,AVG,COUNT…)。
例如我们将以上的数据表按名字进⾏分组,再统计每个⼈登录的次数:
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 表⽰所有⼈的登录次数。
我们可以使⽤ coalesce 来设置⼀个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
以下实例中如果名字为空我们使⽤总数代替:
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)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。