MySQL group by语法和使用示例

作者:IT技术圈子 浏览量:1073   发表于 2024-07-25 09:38 标签:

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)