格式: select */字段列表 from 数据库表名 [group by 分组字段名 [having 条件表达式]];
– 分组方式
将学生信息表中男、女同学进行分组
原始数据
分组为:男一组,女一组
返回每组第一条数据
2.2、分组应用
实际分组方式
1 2 3 4 5 6 7 8
mysql> select sex from students group by sex; +------+ | sex | +------+ | 男 | | 女 | +------+ 2 行于数据集 (0.01 秒)
注意:
当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的。
单独分组没什么用处,分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
案例:
查询学生信息表中男、女同学的人数
1 2 3 4 5 6 7 8
mysql> select sex,count(*) from students group by sex; +------+----------+ | sex | count(*) | +------+----------+ | 男 | 6 | | 女 | 3 | +------+----------+ 2 行于数据集 (0.01 秒)
where与having
– where**
查询学生信息表中数学成绩在80分以上的,男、女同学的人数
1 2 3 4 5 6 7 8 9
#where后面不能用聚合函数 mysql> select sex,count(*) from students where math>80 group by sex; +------+----------+ | sex | count(*) | +------+----------+ | 男 | 4 | | 女 | 1 | +------+----------+ 2 行于数据集 (0.01 秒)
注意:
where是将不符合条件的先去掉,在分组。
– having
查询学生信息表中男、女同学的人数,人数超过3人显示
1 2 3 4 5 6 7 8
#having n>3 可以写成 having count(*)>3 mysql> select sex,count(*) as n from students group by sex having n>3; +------+---+ | sex | n | +------+---+ | 男 | 6 | +------+---+ 1 行于数据集 (0.03 秒)