聚集函数
SQL中的关系代数扩展有(其中A为某属性):
- count(*) 统计关系中有多少元组
- count(A) 统计属性A有多少个,可加distinct
- sum(A) 求和,可加distinct
- avg(A) 求平均,可加distinct
- max(A) 求最大值
- min(A) 求最小值
聚集函数不能嵌套使用。
select count(student.grade)
from student
where student.age == 18
以上代码求出所有18岁的学生中有多少个不同年级。
分组
select target_list
from relation_list
where qualification
group by grouping_list
having group_qualification
以上是分组的标准格式。
分组语句将group by后的属性相同的划分为一组,对每一组进行select-from-where查询并生成一个元组。
having子句对group by中的组再做一次筛选。
分组语句的执行步骤如下:
- 对from的表进行笛卡尔乘积
- where筛选结果
- 按照group by来分组
- having筛选分组结果
- select投影,每组得到一个元组
select S.rating, min(S.age) as minage
from Sailors S
where S.age >= 18
group by S.rating
having count(*) > 1
例如,以上代码用上面的执行步骤来看,先从Sailors表中筛选age > 18的元组,以每个不同的rating为标志分组,最后对每个分组筛选出组中的元组大于1的组。