MySQL(21)--- GROUP BY 语句
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 语句相关推荐
- mac mysql语句_Mac 下MySQL使用group by 语句报错解决方法
遇到的问题:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonagg ...
- uwp连接mysql数据库_mysql 8.0 新版本出现group by 语句不兼容问题
mysql 新版本出现group by 语句不兼容问题 1. 具体出错提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP ...
- mysql group by 天_MySQL group by语句如何优化
在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1G ************* ...
- 《零基础》MySQL GROUP BY 语句(十九)
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...
- mysql中关于group的语句指令_mysql不支持group by的解决方法小结
下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了. 一旦开启 only ...
- Mysql数据库中的 Group by 语句的特殊之处(select 中的项目不必出现在Group by中)---不建议使用!
■以前的认知 (基本知识,完全正确) ・使用GROUP BY 语句时,SELECT中的项目,必须在GROUP BY 中出现 SELECTa, b, cFROMtable1GROUP BYa, b, c ...
- 37 | MySQL的内部临时表使用场景?(Group by语句使用注意事项)
一.前言 在执行语句时候,记得多"食用"explian看看语句性能如何? create table t1(id int primary key, a int, b int, ind ...
- MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...
- 【mysql】哦买噶!多么强大的group by语句
GROUP BY 语句 group by语句介绍 工具: 实例 建表 user表 (1)基本用法 (2)`GROUP BY`语句中的`GROUP_CONCAT`函数() (3)利用 `count`函数 ...
最新文章
- HashFlare矿池退出BTC挖矿,Coingeek矿池继续增加BCH算力
- js中的SetTimeOut
- 【FFmpeg】FFmpeg 相关术语简介 二
- 《Docker——容器与容器云》:第五章 构建自己的容器云
- SYN攻击原理 accpet()函数调用时机
- github代码_GitHub启动代码空间
- std::move()源码分析
- 安装卡主_吸顶灯怎么安装 吸顶灯安装方法【技巧】
- 【原创】PDA 实现DataGrid可编辑
- 第三届空间信息智能服务研讨会
- python音乐推荐系统的设计与实现_个性化音乐推荐系统设计与实现
- 【网络教程】Windows字体发虚,字体不清晰怎么办?
- kali自带发包工具tcpreplay
- python 物理引擎 摩擦力_python下的Box2d物理引擎的配置
- 如何修改apk服务器,如何修改apk服务器地址
- 如何在python中输入复杂的数学公式_如何快速输入复杂的数学公式?这里有 3 个实用技巧...
- Java的triangle方法_java三角形类Triangle用法代码解析
- 微信手机端调试工具-微信Web开发者工具使用教程
- SQL语句集锦 [转]
- python云图_python聚合云图
热门文章
- Keil综合(01)一些常见文件类型的作用和功能说明
- arm 饱和指令_ARM内核全解析,从ARM7,ARM9到CortexA7,A8,A9,A12,A15到CortexA53,A57
- uc for linux,在uClinux文件系统中增加应用程序
- 《深入理解 Spring Cloud 与微服务构建》第三章 Spring Cloud
- 【LeetCode】剑指 Offer 42. 连续子数组的最大和
- mysql基础知识总结
- 【Python爬虫】入门知识
- setTimeout 和 setInterval 的区别
- (转)Spring Boot 2 (九):【重磅】Spring Boot 2.1.0 权威发布
- jQuery 往table添加新内容有以下四个方法: