��1、group by子句
��group by子句根据一个或多个属性的值来对元组进行分组,如图4-4-1所示。聚集函数可以作用在不同的分组上,例如:select
branch-name, sum(balance) as Summaryfrom accountgroup by branch-name
图4-4-1:关系account
��2、having子句
��having子句主要是针对分组进行条件限制。having子句中的谓词只有在形成分组后才起作用,因此可以在having子句中使用聚集函数。通常,having子句只用在有group
by子句的SQL语句中,用来去掉不符合指定条件(即having子句中的谓词)的分组。例如:
select branch-name, sum(balance) as Summary
from account
group by branch-name
having avg(balance) > 1200
��如果在同一个查询中同时存在where子句和having子句,那么首先应该用where子句中的谓词进行选择;满足where谓词的元组通过group
by子句形成分组;然后在每个分组上使用having子句,不符合having谓词的分组将被抛弃掉!例如,找出居住在Harrison市且在银行中至少有三个帐户的客户的平均余额:
select d.customer-name, avg(balance) as Average-Balance
from depositor d, account a, customer c where d.account-number = a.account-number and
���d.customer-name = c.customer-name and
���customer-city = "Harrison"
group by d.customer-name having count(distinct d.account-number) >= 3