createtable student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int);insertinto student
(id,name,age,sex,address,math,english)values(1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'玛德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
分组查询 : 统计具有某个相同特征的一组数据
语法
groupby 分组字段;
按照性别,分别查询男女同学的各科平均分、总人数(group)
//分组之后展示的字段有两类: 分组字段或聚合函数,其他字段没有意义select sex,avg(math)as 数学平均分,avg(english)as 英语平均分,count(id)as 总人数 from student groupby sex;
//常规写法select sex,avg(math)as 数学平均分,avg(english)as 英语平均分,count(id)as 总人数 from student where math>70groupby sex havingcount(id)>2;//别名写法select sex,avg(math)as 数学平均分,avg(english)as 英语平均分,count(id)as 总人数 from student where math>70groupby sex having 总人数>2;
总结
where 在分组之前进行限定,如果条件不满足,则不参与分组,(后面不可以跟聚合函数)
having 在分组之后进行限定,如果条件不满足,则不会被查询出来,(后面可以跟聚合函数)