MySQL group by语法和使用示例
MYSQL GROUP BY 子句用于从多条记录中收集数据并将结果按一列或多列分组。它通常用于 SELECT 语句。
您还可以在分组列上使用一些聚合函数,如 COUNT、SUM、MIN、MAX、AVG 等。
GROUP BY 语法
SELECT column_name1, column_name2……,aggregate_function(column_name)FROM table_name[WHERE conditions]GROUP BY column_name1,column_name2……;
参数说明
column_name:指定显示的字段名称。
aggregate_function:它指定了一个函数,例如 SUM、COUNT、MIN、MAX 或 AVG 等。
table_name:它指定了要从中检索记录的表。FROM 子句中必须至少列出一个表。
WHERE conditions:可选项,指定要选择的记录必须满足的条件。
示例代码
本实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中。
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, `signin` 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 | signin |+----+--------+---------------------+--------+| 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)
带有 COUNT 函数的 MySQL GROUP BY 子句
接下来我们使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;+--------+----------+| name | COUNT(*) |+--------+----------+| 小丽 | 1 || 小明 | 3 || 小王 | 2 |+--------+----------+3 rows in set (0.01 sec)
带有 SUM 函数的 MySQL GROUP BY 子句
mysql> SELECT name, SUM(signin) as signin_count -> FROM employee_tbl -> GROUP BY name;+--------+--------------+| name | signin_count |+--------+--------------+| 小丽 | 2 || 小明 | 7 || 小王 | 7 |+--------+--------------+3 rows in set (0.00 sec)
带有 MIN 函数的 MySQL GROUP BY 子句
以下示例显示每个人最小次数的登录记录。
mysql> SELECT name, MIN(signin) as minsign FROM employee_tbl GROUP BY name;+--------+---------+| name | minsign |+--------+---------+| 小丽 | 2 || 小明 | 1 || 小王 | 3 |+--------+---------+3 rows in set (0.00 sec)
带有 MAX 函数的 MySQL GROUP BY 子句
以下示例显示每个人最大次数的登录记录。
mysql> SELECT name, MAX(signin) as maxsign FROM employee_tbl GROUP BY name;+--------+---------+| name | maxsign |+--------+---------+| 小丽 | 2 || 小明 | 4 || 小王 | 4 |+--------+---------+3 rows in set (0.00 sec)
带有 AVG 函数的 MySQL GROUP BY 子句
以下示例显示每个人登录次数的平均值。
mysql> SELECT name, AVG(signin) as avgsign FROM employee_tbl GROUP BY name;+--------+---------+| name | avgsign |+--------+---------+| 小丽 | 2.0000 || 小明 | 2.3333 || 小王 | 3.5000 |+--------+---------+3 rows in set (0.00 sec)