当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 深入浅出SQL教程之Group by和Having

MSSQL
sqlserver2005 xml字段的读写操作
SQLServer Job运行成功或失败时发送电子邮件通知的图文教程
一个删除指定表的所有索引和统计的过程
SQLServer2005 的查询独占模拟
SQLServer2005 中的几个统计技巧
SQLServer 数据集合的交、并、差集运算
讲解SQL Server系统数据库的工作原理
Windows Vista系统服务安全强化策略
SQL Server中导入导出数据的三种方式
SQL Server用索引视图查看性能状况
缩小SQL Server数据库的日志文件
在不同版本的SQL Server中存储数据
Windows Server 2008 十大出色功能
SQL Server系统数据库的工作原理
SQL Server中“函数”的两种用法
掌握SQL Server数据库的实用技巧
SQL Server2000数据库分离与附加
SQL Server 2008的一些新特点及独到之处
删除SQL Server 2000所有的危险扩展
SQL 2005身份证函数包含验证和15位转18位

MSSQL 中的 深入浅出SQL教程之Group by和Having


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 124 ::
收藏到网摘: n/a

在介绍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 子句,还采用第三节介绍的bbc表。

SQL实例:

一、显示每个地区的总人口数和总面积:

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

二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

以下为引用的内容:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

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

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