|
先来段小使用说明:
GROUP BY 语句根据一个或多个列对结果集进行分组 ;
在分组的列上可以使用 COUNT / SUM / AVG 等函数。
先看元数据长啥样:- 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)
复制代码
先统计每个人有多个条记录,按照名字进行分组- mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
- +--------+----------+
- | name | COUNT(*) |
- +--------+----------+
- | 小丽 | 1 |
- | 小明 | 3 |
- | 小王 | 2 |
- +--------+----------+
- 3 rows in set (0.01 sec)
复制代码
使用 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语法 ;参数说明;如果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)
复制代码
|
|