首页> 基础笔记 >Mysql基础学习 Mysql基础学习

MySQL使用GROUP BY对查询结果分组

作者:小萝卜 2019-08-29 浏览 2025

简介前面使用统计函数返回的是所有记录的统计结果,如果要对数据进行分组统计,就需要使用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)

文章评论

    高端网站建设