GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

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)

MySQL(21)--- GROUP BY 语句相关推荐

  1. mac mysql语句_Mac 下MySQL使用group by 语句报错解决方法

    遇到的问题:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonagg ...

  2. uwp连接mysql数据库_mysql 8.0 新版本出现group by 语句不兼容问题

    mysql 新版本出现group by 语句不兼容问题 1. 具体出错提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP ...

  3. mysql group by 天_MySQL group by语句如何优化

    在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1G ************* ...

  4. 《零基础》MySQL GROUP BY 语句(十九)

    GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...

  5. mysql中关于group的语句指令_mysql不支持group by的解决方法小结

    下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了. 一旦开启 only ...

  6. Mysql数据库中的 Group by 语句的特殊之处(select 中的项目不必出现在Group by中)---不建议使用!

    ■以前的认知 (基本知识,完全正确) ・使用GROUP BY 语句时,SELECT中的项目,必须在GROUP BY 中出现 SELECTa, b, cFROMtable1GROUP BYa, b, c ...

  7. 37 | MySQL的内部临时表使用场景?(Group by语句使用注意事项)

    一.前言 在执行语句时候,记得多"食用"explian看看语句性能如何? create table t1(id int primary key, a int, b int, ind ...

  8. MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...

  9. 【mysql】哦买噶!多么强大的group by语句

    GROUP BY 语句 group by语句介绍 工具: 实例 建表 user表 (1)基本用法 (2)`GROUP BY`语句中的`GROUP_CONCAT`函数() (3)利用 `count`函数 ...

最新文章

  1. HashFlare矿池退出BTC挖矿,Coingeek矿池继续增加BCH算力
  2. js中的SetTimeOut
  3. 【FFmpeg】FFmpeg 相关术语简介 二
  4. 《Docker——容器与容器云》:第五章 构建自己的容器云
  5. SYN攻击原理 accpet()函数调用时机
  6. github代码_GitHub启动代码空间
  7. std::move()源码分析
  8. 安装卡主_吸顶灯怎么安装 吸顶灯安装方法【技巧】
  9. 【原创】PDA 实现DataGrid可编辑
  10. 第三届空间信息智能服务研讨会
  11. python音乐推荐系统的设计与实现_个性化音乐推荐系统设计与实现
  12. 【网络教程】Windows字体发虚,字体不清晰怎么办?
  13. kali自带发包工具tcpreplay
  14. python 物理引擎 摩擦力_python下的Box2d物理引擎的配置
  15. 如何修改apk服务器,如何修改apk服务器地址
  16. 如何在python中输入复杂的数学公式_如何快速输入复杂的数学公式?这里有 3 个实用技巧...
  17. Java的triangle方法_java三角形类Triangle用法代码解析
  18. 微信手机端调试工具-微信Web开发者工具使用教程
  19. SQL语句集锦 [转]
  20. python云图_python聚合云图

热门文章

  1. Keil综合(01)一些常见文件类型的作用和功能说明
  2. arm 饱和指令_ARM内核全解析,从ARM7,ARM9到CortexA7,A8,A9,A12,A15到CortexA53,A57
  3. uc for linux,在uClinux文件系统中增加应用程序
  4. 《深入理解 Spring Cloud 与微服务构建》第三章 Spring Cloud
  5. 【LeetCode】剑指 Offer 42. 连续子数组的最大和
  6. mysql基础知识总结
  7. 【Python爬虫】入门知识
  8. setTimeout 和 setInterval 的区别
  9. (转)Spring Boot 2 (九):【重磅】Spring Boot 2.1.0 权威发布
  10. jQuery 往table添加新内容有以下四个方法: