a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 115|回复: 0

[考试辅导] 如何运用SELECT命令中的GROUPBY和HAVING子句

[复制链接]
发表于 2012-8-3 00:05:24 | 显示全部楼层 |阅读模式
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 : S- ~0 L/ A1 p6 t! T1 I, t
SELECT SUM(population) FROM bbc 这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
! T; q6 c$ o: R( b2 c( L
. C6 L; X! m$ f" E* G% |/ ^# g! Q0 ?4 ~" G9 j
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值.也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值. 0 A( Y2 ~, y! z
( R5 K0 D* U' h, Z7 N; O" a; M
HAVING子句可以让我们筛选成组后的各组数据. WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.而 HAVING子句在聚合后对组记录进行筛选。
$ g0 i* p0 f- A( R. `
7 f7 [% \  @2 x7 c3 \. k2 C) `  D, O让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。
! j/ ^" W! Z8 J6 \/ c$ E$ G
8 j8 |+ T3 ~; o$ s2 |SQL实例: 3 H3 L9 j% |* u" k

- c: o  ^$ E' |* _6 `+ ]9 J一、显示每个地区的总人口数和总面积.SELECT region, SUM(population), SUM(area)  FROM bbc  GROUP BY region先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
* X& E& H: j8 \/ |0 a9 m3 R' T* N二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。SELECT region, SUM(population), SUM(area)  FROM bbc  GROUP BY region  HAVING SUM(area) > 1000000在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。相反,HAVING子句可以让我们筛选成组后的各组数据.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 00:12 , Processed in 0.245338 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表