现在的位置: 首页 > 综合 > 正文

SQL语句HAVING的用法

2013年10月07日 ⁄ 综合 ⁄ 共 1553字 ⁄ 字号 评论关闭

SQL语句HAVING的用法

HAVING 子句

因SQL语句中WHERE 关键字无法与合计函数一起使用,
所以增加 HAVING 子句来使用,
其用法如下所示:

1  SQL HAVING 语法
//-------------------------------------
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

//-------------------------------------

select 列名1,聚集函数(列名2)
from 表名
where 列名1 操作符 值
group by 列名1
having 聚集函数(列名2) 操作符 值

//-------------------------------------

2  SQL HAVING 实例
//------------------------------------- 
我们拥有下面这个 "Buys" 表:
BuysId BuyDate
   BuysPrice Customer
1 2008/12/29
2000 push
2 2008/11/23
2600 oarter
3 2008/10/05
800 push
4 2008/09/28
400 push
5 2008/08/06
3000 zdams
6 2008/07/21
200 oarter
//-------------------------------------
2.1用法: 现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(BuysPrice) FROM Buys
GROUP BY Customer
HAVING SUM(BuysPrice)<3000

执行结果集类似:
Customer SUM(BuysPrice)
oarter        2800

2.2用法: 现在我们希望查找客户 "push" 或 "zdams" 拥有超过 1500 的订单总金额。
我们在 SQL 语句中增加了一个普通的 WHERE 子句:
SELECT Customer,SUM(BuysPrice) FROM Buys
WHERE Customer='push' OR Customer='zdams'
GROUP BY Customer
HAVING SUM(BuysPrice)>2500
结果集:
Customer SUM(BuysPrice)
push 3200
zdams 3000
 
执行原理:
SQL语句中同时含有where子句、group by 子句 、having子句及聚集函数时执行过程:

当同时含有where子句、group by 子句 、having子句及聚集函数时,

执行顺序如下:
执行where子句查找符合条件的数据;
使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;
最后用having 子句去掉不符合条件的组。
select dno,count(*)
   from employee
   group by dno
   having count(*)>3

需要注意:having 子句中的每一个元素也必须出现在select列表中。
有些数据库例外,如oracle having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限
制。

having子句限制的是组,而不是行。
where子句中不能使用聚集函数,而having子句中可以。
select dno,sum(salary)
   from employee
   group by dno
   having sum(salary)>10000

---the---end---

抱歉!评论已关闭.