首页> 基础笔记 >Mysql基础学习 Mysql基础学习
MySQL使用GROUP BY对查询结果分组
作者:小萝卜 2019-08-29 【 MySql 数据库 】 浏览 2596
简介前面使用统计函数返回的是所有记录的统计结果,如果要对数据进行分组统计,就需要使用GROUP BY子句。这将可以允许用户在对数据进行分类的基础上,进行再查询。GROUP BY子句将表按列值分组,列的值相同的分为一组。如果GROUP BY后面有多个列名,则先按第一个列名分组,再在每组中按第二个列名分组。
MySQL使用GROUP BY对查询结果分组
前面使用统计函数返回的是所有记录的统计结果,如果要对数据进行分组统计,就需要使用GROUP BY子句。这将可以允许用户在对数据进行分类的基础上,进行再查询。GROUP BY子句将表按列值分组,列的值相同的分为一组。如果GROUP BY后面有多个列名,则先按第一个列名分组,再在每组中按第二个列名分组。
需要注意的是,在GROUP BY子句中不支持对字段分配别名,也不支持任何使用了统计函数的集合列。 在完成数据结果的分组查询和统计后,还可以使用HAVING子句来对查询的结果,进行进一步的筛选。 在SELECT语句的子句中:WHERE子句选择所需要的行;GROUP BY子句进行了必要的分组整理;而HAVING子句对最后的分组结果进行了重新筛选。实例:
-- 分组:group by 列名
--===========================================
-- 按班级分组查看班级信息,相同的班合成一组了
mysql> select classid from stu group by classid;
+---------+
| classid |
+---------+
| lamp106 |
| lamp110 |
| lamp111 |
+---------+
3 rows in set (0.00 sec)
-- 按班级分组,并统计每个组的人数。
mysql> select classid,count(*) from stu group by classid;
+---------+----------+
| classid | count(*) |
+---------+----------+
| lamp106 | 4 |
| lamp110 | 7 |
| lamp111 | 3 |
+---------+----------+
3 rows in set (0.00 sec)
-- 统计每个班级的男和女生人数。
mysql> select classid,sex,count(*) from stu group by classid,sex;
+---------+-----+----------+
| classid | sex | count(*) |
+---------+-----+----------+
| lamp106 | m | 3 |
| lamp106 | w | 1 |
| lamp110 | m | 3 |
| lamp110 | w | 4 |
| lamp111 | m | 2 |
| lamp111 | w | 1 |
+---------+-----+----------+
6 rows in set (0.00 sec)
-- 统计每个班级的男和女生人数,要求只要显示3人及以上的。
mysql> select classid,sex,count(*) from stu group by classid,sex having count(*)>=3;
mysql> select classid,sex,count(*) as num from stu
-> group by classid,sex having num>=3;
+---------+-----+-----+
| classid | sex | num |
+---------+-----+-----+
| lamp106 | m | 3 |
| lamp110 | m | 3 |
| lamp110 | w | 4 |
+---------+-----+-----+
3 rows in set (0.00 sec)
很赞哦! (1)