group by name :意为对name进行分组(name表示属性)
group by name having 条件A :意为对name分组后,再根据条件A进行删选
例子:
表table
name course score
A 数学 80
A 科学 90
A 语文 70
B 数学 82
B 科学 81
B 语文 90
语句:select name from table group by name
含义:从表table中查找所有name,并按name进行分组。分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
结果:
name
A
B
语句:select name from table group by name having min(score)>80
含义:按name对表table进行分组后,查找最小score大于80分的name。即查询每门课程分数都大于80的学生姓名
结果:
name
B
语句:select * from table where name in (select name from table group by name having min(score)>80)
含义:查询每门课程分数都大于80 的学生信息
结果:
name course score
B 数学 82
B 科学 81
B 语文 90
恩,还是比较难理解的。说白了,group by就是把数据分组,分组后如果要对分出来的每一组的数据进行处理,后面就跟一个having + 筛选条件。这里的筛选,针对的是分组后的数据。