数据库知识整理<六>
聚合函数与分组
6.1使用聚合函数进行数据统计:
聚合函数常见的有以下几种:
- count:返回该结果集中行的数目。
- sum:返回结果集中所有值的总和。
- avg:返回结果集中所有值的平均值。
- max:返回结果集中所有值得最大值。
- min:返回结果集中所有值的最小值。
- 执行行和列的计数:select count(<计数规范>) as <别名> from <表名>;其中技术规范的关键字有*、all、distinct。‘*’包括所有行包括空值null,‘all’计数所指定的列的所有非空值行,如果在都不带关键字的情况下默认此操作。‘distinct’计数指定列所有唯一非空值行。
- 返回列合计值:select sum(<计数规范>) as <别名> from <表名>;此函数与count函数唯一使用不同在于,sum不能使用通配符‘*’,其他使用基本一样。
- 获取平均值:select avg(<计数规范>) as <别名> from <表名>;使用all和distinct时,null值被忽略掉。
- 返回最大最小值:select max(<最大值规范>) from 表;select min(<最小值规范>) from 表;都是可以加上别名的。
6.2数据分组:
SQL提供的一种技术,将表中的行分组,然后在每个组上应用聚合函数,这种分组技术与聚合函数一起使用,功能尤为强大。
- 过滤分组数据: select 列A,聚合函数(聚合函数规范) from 表名 where 过滤条件 group by 列A;(这里注意:group by 后面跟的列名是和前面的select 后面的列名同步,面试被问到过这个问题。许多人都没在意过。)例如对表instant数据库输入并执行SQL语句—select studentId ,count(*) AS highPasses from studentExam where mark >70 group by studentId;此语句执行的方式为,先将考试分数小于等于70的先过滤掉,然后再将具有相同的studentId列值的行分组在一起,最后执行count函数,计算余下的行中每个学生通过考试的次数 。
- 使用having子句:
6.3Sql语句的执行顺序:
学过的子句有:
- select子句
- from子句
- where子句
- group by 子句
- order by 子句
- having 子句
执行顺序是:
- 首先是执行from子句
- 再执行where过滤
- 有分组的话就执行group by
- 为每个组计算select祖居聚合函数的值,并为每组生成查询结果中的一行。
- 如果有having子句,则根据having子句在过滤,分组计算聚合计算的结果再次过滤。
- 如果有order by子句中,则根据order by子句中的列,对结果集进行排序。
总结:聚合函数的使用可谓是向一个工具一样,重要性不言而喻。学会使用集合函数其功能是相当强大,相当优雅。Sql语句的执行顺序也是会被考察到的,也要注意区别掌握。