从group by 展开去
一、概念
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。既然是要针对若干个“小区域”进行数据处理,那就肯定是与sql的聚合函数搭配起来使用。
二、建表
这里在我使用经常练习sql的一个数据库里的建一张表,表明:demo
三、简单group by练习
SELECT Sage,avg(Sscore) FROM t_student GROUP BY Sage;
结果为
四、遇到问题
当我使用Oracle写一个这样的sql 时,就会报错:SELECT Ssex, Sage,avg(Sscore) FROM t_student GROUP BY Sage;
这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
但是我在MySQL中运行这段sql却可以正常运行,不过现实的结果明显是不符合逻辑的。
五、聚合函数
group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中。除了avg()函数外,还有这些聚合函数,
六、having 与 where之间的区别
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。