聚合函数与分组


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、以下情况不适合建立索引:增删改操作很频繁/查询返回的数据量过大

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...