1、为什么要使用聚合函数与分组?
在使用基本的sql语句从数据库中抽取数据后,然后在应用程序代码中进行汇总。但是,在网络环境中,如果从数据库中返回成千上万条记录,仅仅是为了得到一个汇总值,这样的效率显然很差的。使用sql中的聚合函数在数据库中计算,最后通过网络返回单一的值,无疑是更好的解决方。
2、 常用的聚合函数:
count:返回结果集中行的数目
county(*)代表返回表中行记录的总数
count(列名)代表返回表中不为空的记录数
sum:返回结果集中所有值得总和
不能使用星号(*)通配符
avg:返回结果集中所有值的平均值
max:返回结果集中所有值的最大值
min:返回结果集中所有值的最小值
3、 数据分组:group by
分组查询中什么列可以作为查询列:
1.查询的列是一个聚合函数
2.查询的列如果是一个普通列,必须按这列分组
数据分组的执行顺序:
如:select s_name,avg(s_score) from t_Student where s_score>=60 and s_name!='jr' group by s_name having avg(s_score)>=70 order by avg(s_score) desc; 1.先执行where对全表数据做筛选 2.针对筛选后的结果集按s_name进行分组,将s_name相同的记录放在1组 3.针对每1组执行select s_name,avg(s_score),有几组就执行几次 4.将每组的执行结果拼起来5.对上面的结果根据having做筛选 6.排序4、 WHERE和HAVING的区别: 1、WHERE用在分组之前,不能包含聚合函数 2、HVAING用在分组之后,对分组后的结果进行筛选,有HAVING,必定会有GROUP BY4、 索引: 1、索引是独立的数据库对象,也需要维护 2、索引提高查询速度,降低增删改速度 3、索引只会由满足一定条件的查询触发,并不是越多越好 4、以下情况不适合建立索引:增删改操作很频繁/查询返回的数据量过大
原文链接:https://www.f2er.com/javaschema/287476.html