老莫的笔记本  
  
查看: 1230|回复: 0

MYSQL 分组 GROUP BY语句

[复制链接]

662

主题

878

帖子

5141

积分

超级版主

Rank: 8Rank: 8

积分
5141
发表于 2018-7-26 23:37:17 | 显示全部楼层 |阅读模式
先来段小使用说明:
GROUP BY 语句根据一个或多个列对结果集进行分组 ;
在分组的列上可以使用 COUNT / SUM / AVG 等函数。

先看元数据长啥样:
  1. mysql> set names utf8;
  2. mysql> SELECT * FROM employee_tbl;
  3. +----+--------+---------------------+--------+
  4. | id | name   | date                | singin |
  5. +----+--------+---------------------+--------+
  6. |  1 | 小明 | 2016-04-22 15:25:33 |      1 |
  7. |  2 | 小王 | 2016-04-20 15:25:47 |      3 |
  8. |  3 | 小丽 | 2016-04-19 15:26:02 |      2 |
  9. |  4 | 小王 | 2016-04-07 15:26:14 |      4 |
  10. |  5 | 小明 | 2016-04-11 15:26:40 |      4 |
  11. |  6 | 小明 | 2016-04-04 15:26:54 |      2 |
  12. +----+--------+---------------------+--------+
  13. 6 rows in set (0.00 sec)
复制代码

先统计每个人有多个条记录,按照名字进行分组
  1. mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
  2. +--------+----------+
  3. | name   | COUNT(*) |
  4. +--------+----------+
  5. | 小丽 |        1 |
  6. | 小明 |        3 |
  7. | 小王 |        2 |
  8. +--------+----------+
  9. 3 rows in set (0.01 sec)
复制代码

使用 WITH ROLLUP  ---- 可以实现在分组统计的数据基础上再进行相同的统计(SUM,AVG,COUNT)
  1. mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
  2. +--------+--------------+
  3. | name   | singin_count |
  4. +--------+--------------+
  5. | 小丽 |            2 |
  6. | 小明 |            7 |
  7. | 小王 |            7 |
  8. | NULL   |           16 |
  9. +--------+--------------+
  10. 4 rows in set (0.00 sec)
复制代码

其中 NULL 表示所有人的登录次数。
我们可以使用COALESCE 来设置一个可以取代NULL 的名称, COALESCE语法 ;
  1. select coalesce(a,b,c);
复制代码
参数说明;如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。    以下实例中名字为我们使用总数替代
  1. mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
  2. +--------------------------+--------------+
  3. | coalesce(name, '总数') | singin_count |
  4. +--------------------------+--------------+
  5. | 小丽                   |            2 |
  6. | 小明                   |            7 |
  7. | 小王                   |            7 |
  8. | 总数                   |           16 |
  9. +--------------------------+--------------+
  10. 4 rows in set (0.01 sec)
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表