第11章 使用数据处理函数
函数:
SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便
函数没有SQL的可移植性强
能运行在多个系统上的代码称为可移植的(portable)
- 文本处理函数
- 日期和时间处理函数
- 数值处理函数
第12章 汇总数据
我们经常需要汇总数据而不用把它们实际检索出来,为此聚集函数
聚集函数(aggregate function)
运行在行组上,计算和返回单个值的函数
AVG()
- 只用于单个列
- AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数
- COUNT()
- MAX()
- MIN()
- SUM()
NULL值 AVG()函数忽略列值为NULL的行 (这几个都忽略)
第13章 分组数据
注意事项:
group by 子句可以包含任意数目的列。
- 这使得能对分组进行嵌套
group by 如果在子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从单个列中取回数据)
- group by子句中列出的每个列都必须是检索列或有效的表达式(但不能是集聚函数)。如果在select 中使用表达式,则必须在group by子句中指定相同的表达式。不能使用别名。
- 除集聚计算语句外,select语句中的每个列都必须在groub by子句中指定相同的表达式。不能使用别名
- 除集聚计算语句外,select语句中的每个列都必须在group by子句中给出
- 如果分组列中具有null值,则null将作为一个分组返回。如果列中有多行null值,它们将分为一组
- group by子句必须出现在where子句后,order by子句之前。
过滤分组
where子句只能过滤行,而不能过滤分组 。Having子句可以过滤分组,
Having非常类似于where,事实上,目前为止所学过的所有类型的WHERE子句都可以用having子句来代替。
SELECT子句顺序唯一的区别是where过滤行,having过滤的是分组。
还可以这么理解:where在数据分组前进行过滤,having在数据分组后进行过滤。where排除的行不包括在分组中。having支持所有where操作符
- select
- from
- where