VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 手册 > MySQL教程 >
  • MySQL GROUP BY 语句

MySQL GROUP BY 语句
上一节我们讲了,如何进行排序,现在我们说一下,如何进行分组。在我们现实工作中,经常会遇到这样的情况,就是我们需对记录,按照某一个字段进行分组;如,我现在要查出,各个部分的员工情况,那么就需要按照部门行分组。

 
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;

以上语法,我们可以看出在使用group by时,并不耽误其它语句的使用
实例演示
本章节实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中。

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 语句:
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 name, COUNT(*) FROM  员工表 GROUP BY name;
+--------+----------+
| 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求和统计了。

上面可以看出,在数据汇总方面。用途还是很方便滴。
 



相关教程