数据库的分组聚集

包含聚集、group byhaving子句的查询的含义可通过以下操作顺序来定义:

(1)最先根据from子句来计算出一个关系。

(2)如果出现了where子句,where子句中的谓词将应用到from子句的结果关系上。

(3)如果出现了group by子句,满足where谓词的元组通过group by子句形成分组,在每个分组上都要进行指定的聚集计算。如果没有group by子句,满足where谓词的整个元组集被当做一个分组。(允许对多个关系一起进行分组,或者先将多个关系进行连接。)

(4)如果出现了having子句,它将应用于每个分组上:不满足having子句谓词的分组将被抛弃。

(5)select子句利用剩下的分组产生出查询结果中的元组,即在每个分组上应用聚集函数来得到结果元组。注:需要保证出现在select语句中但没有被聚集的属性只能是出现在group by子句(准确来说是形成分组的属性)中的那些属性。

 

考虑以下instructor关系的元组:

IDnamedept_namesalary
10101SrinivasanComp.Sci.65000
12121WuFinance90000
15151MozartMusic40000
22222EinsteinPhysics95000
32343El SaidHistory60000
33456GoldPhysics87000
45565KatzComp.Sci.75000
58583CalifieriHistory62000
76543SinghFinance80000
76766CrickBiology72000
83821BrandtComp.Sci.92000
98345KimElec.Eng.80000

以及以下查询语句:

select dept_name, avg(salary) as avg_salary_below_70000
from instructor
where salary < 70000
group by dept_name
having avg(salary) > 42000;

(1)首先从from子句确定查询关系为instructor;

(2)根据where子句筛选出salary < 70000的元组:

IDnamedept_namesalary
10101SrinivasanComp.Sci.65000
15151MozartMusic40000
32343El SaidHistory60000
58583CalifieriHistory62000

(3)根据group by子句中的dept_name属性形成分组:

IDnamedept_namesalary
10101SrinivasanComp.Sci.65000
32343El SaidHistory60000
58583CalifieriHistory62000
15151MozartMusic40000

(4)根据having子句抛弃avg(salary) <= 42000的分组:

IDnamedept_namesalary
10101SrinivasanComp.Sci.65000
32343El SaidHistory60000
58583CalifieriHistory62000

(5)对剩下的分组进行select得到查询结果:

dept_nameavg_salary_below_70000
Comp.Sci.65000
History61000

 

注:如果select语句中查询没有聚集但不出现在group by子句的属性则会出错,例如

select dept_name, ID, avg(salary) as avg_salary_below_70000
from instructor
where salary < 70000
group by dept_name
having avg(salary) > 42000;

在一个特定的分组(通过dept_name定义)中的每位教师都有一个不同的ID,既然分组只输出一个元组,那就无法确定选哪个ID值作为输出。其结果是,SQL不允许出现这样的情况。

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值