-
MySQL GROUP BY 语句
MySQL GROUP BY 语句
上一节我们讲了,如何进行排序,现在我们说一下,如何进行分组。在我们现实工作中,经常会遇到这样的情况,就是我们需对记录,按照某一个字段进行分组;如,我现在要查出,各个部分的员工情况,那么就需要按照部门行分组。
例
select * 员工表 group by 部门
这里就是按部分,进行了分组
在分组的列上我们可以使用 COUNT, SUM, AVG等聚合函数。
GROUP BY 语法
以上语法,我们可以看出在使用group by时,并不耽误其它语句的使用
实例演示
本章节实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中。
1.WITH ROLLUP:在group分组字段的基础上再进行统计数据。
例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下:
CREATE TABLE `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(25) DEFAULT NULL COMMENT '标题',
`uid` int(11) DEFAULT NULL COMMENT 'uid',
`money` decimal(2,0) DEFAULT '0',
`name` varchar(25) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;
存几条数据看看:
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('2', '国庆节', '2', '12', '周伯通');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('3', '这次是8天假哦', '3', '33', '老顽童');
分组统计:
SELECT name, SUM(money) as money FROM test GROUP BY name WITH ROLLUP;

可以看到按照name分组后对money求和统计了。

上面可以看出,在数据汇总方面。用途还是很方便滴。
上一节我们讲了,如何进行排序,现在我们说一下,如何进行分组。在我们现实工作中,经常会遇到这样的情况,就是我们需对记录,按照某一个字段进行分组;如,我现在要查出,各个部分的员工情况,那么就需要按照部门行分组。
例
select * 员工表 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;
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 `员工表`;
CREATE TABLE `员工表` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `员工表` VALUES ('1', '小明', '2016-04-22 15:25:33'), ('2', '小王', '2016-04-20 15:25:47'), ('3', '小丽', '2016-04-19 15:26:02'), ('4', '小王', '2016-04-07 15:26:14'), ('5', '小明', '2016-04-11 15:26:40'), ('6', '小明', '2016-04-04 15:26:54');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
导入成功后,执行以下 SQL 语句:SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `员工表`;
CREATE TABLE `员工表` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `员工表` VALUES ('1', '小明', '2016-04-22 15:25:33'), ('2', '小王', '2016-04-20 15:25:47'), ('3', '小丽', '2016-04-19 15:26:02'), ('4', '小王', '2016-04-07 15:26:14'), ('5', '小明', '2016-04-11 15:26:40'), ('6', '小明', '2016-04-04 15:26:54');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
mysql> set names utf8;
mysql> SELECT * FROM 员工表;
+----+--------+---------------------+--------+
| id | name | date |
+----+--------+---------------------+--------+
| 1 | 小明 | 2016-04-22 15:25:33 |
| 2 | 小王 | 2016-04-20 15:25:47 |
| 3 | 小丽 | 2016-04-19 15:26:02 |
| 4 | 小王 | 2016-04-07 15:26:14 |
| 5 | 小明 | 2016-04-11 15:26:40 |
| 6 | 小明 | 2016-04-04 15:26:54 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)
接下来我们使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:mysql> SELECT * FROM 员工表;
+----+--------+---------------------+--------+
| id | name | date |
+----+--------+---------------------+--------+
| 1 | 小明 | 2016-04-22 15:25:33 |
| 2 | 小王 | 2016-04-20 15:25:47 |
| 3 | 小丽 | 2016-04-19 15:26:02 |
| 4 | 小王 | 2016-04-07 15:26:14 |
| 5 | 小明 | 2016-04-11 15:26:40 |
| 6 | 小明 | 2016-04-04 15:26:54 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)
mysql> SELECT name, COUNT(*) FROM 员工表 GROUP BY name;
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+
3 rows in set (0.01 sec)
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+
3 rows in set (0.01 sec)
1.WITH ROLLUP:在group分组字段的基础上再进行统计数据。
例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下:
CREATE TABLE `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(25) DEFAULT NULL COMMENT '标题',
`uid` int(11) DEFAULT NULL COMMENT 'uid',
`money` decimal(2,0) DEFAULT '0',
`name` varchar(25) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;
存几条数据看看:
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('2', '国庆节', '2', '12', '周伯通');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('3', '这次是8天假哦', '3', '33', '老顽童');
分组统计:
SELECT name, SUM(money) as money FROM test GROUP BY name WITH ROLLUP;

可以看到按照name分组后对money求和统计了。

上面可以看出,在数据汇总方面。用途还是很方便滴。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式