SQL教程之Group by和Having

qianjin558 2007-04-09 01:48:42

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 SELECT SUM(population) FROM bbc


这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。

通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.

而 HAVING子句在聚合后对组记录进行筛选。

让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句。

SQL实例:

一、显示每个地区的总人口数和总面积: SELECT region, SUM(population), SUM(area)

FROM bbc

GROUP BY region


先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。 SELECT region, SUM(population), SUM(area)

FROM bbc

GROUP BY region

HAVING SUM(area)>1000000


在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

相反,HAVING子句可以让我们筛选成组后的各组数据

转http://database.51cto.com/
...全文
1140 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouyulin 2007-04-11
  • 打赏
  • 举报
回复
楼主辛苦了。
mansonliu 2007-04-11
  • 打赏
  • 举报
回复
谢谢楼主
lin_now 2007-04-11
  • 打赏
  • 举报
回复
我自己搬板凳还不行?
quanyy 2007-04-11
  • 打赏
  • 举报
回复
学习
smartgoofy 2007-04-11
  • 打赏
  • 举报
回复
learning....
popeye627 2007-04-11
  • 打赏
  • 举报
回复
楼主辛苦
joses 2007-04-11
  • 打赏
  • 举报
回复
o _ o
jwt1982 2007-04-10
  • 打赏
  • 举报
回复
占啊占!
王金豆 2007-04-10
  • 打赏
  • 举报
回复
学习
onlyonereason 2007-04-10
  • 打赏
  • 举报
回复
我的名字就是学习
guojh021 2007-04-10
  • 打赏
  • 举报
回复
占位
中国风 2007-04-10
  • 打赏
  • 举报
回复
占位
hb_gx 2007-04-10
  • 打赏
  • 举报
回复
having只能与 select 语句一起使用。having 通常在 group by 子句中使用。如果不使用 group by 子句,则 having 的行为与 where 子句一样。
kourr2004 2007-04-10
  • 打赏
  • 举报
回复
学习:)
leo_lesley 2007-04-10
  • 打赏
  • 举报
回复
学习!
vzxq 2007-04-10
  • 打赏
  • 举报
回复
学习!
feixiangVB 2007-04-10
  • 打赏
  • 举报
回复
好文~~~
graduate2006 2007-04-10
  • 打赏
  • 举报
回复
学习
ptpa 2007-04-10
  • 打赏
  • 举报
回复
en 学习中~~
ggygd 2007-04-10
  • 打赏
  • 举报
回复
|
加载更多回复(16)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧