热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

SQL 中几个谓词的收集与整理 (GROUP BY & HAVING )

来源: 作者: 时间:2008-02-21 Tag: 点击:
3、GROUP BY & HAVING

之所以把这两个放在一起写,是因为他们两个有密切的联系。我们先来看看group by

group by子句查询所得到的结果是按某一列或多列值分组,值相等的为一组。比如:
 sex
 age
 A
18
 B
20
 A
20

想让A性别的归一组,就可以应用到group by了,但是group by更多的情况是应用于集函数。比如

select sex,sum(age) sumage
from t
group by sex;

这样就可以出现这样的结果:
 sex
 sumage
 A
 38
 B
 20

group by的使用形式一般为:

SELECT column,SUM(column) FROM table GROUP BY column

其中SUM()或以是其它集函数。

HAVING 的引入,因为WHERE子句后面不能接集函数,而集函数是我们经常大量使用的,这就大大不方便,所以SQL引入了HAVING。 WHERE子句与HAVING子句的区别在于:作用对象不同,WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,从中选择满足条件的组。
简单一点说就是:WHERE筛选记录,HAVING筛选组。

从HAVING 与WHERE 的区别不难看出HAVING的应用,与分组密切相关。与就是经常和 GROUP BY一起使用了。

一般形式:
SELECT column,SUM(column) FROM table
GROUP BY column
HAVING SUM(column) condition value

如前面讲到的例子:

select sex,sum(age) sumage
from t
group by sex
having sum(age)>20;

结果就只列出一条记录了:
sex sumage
--  -----
A   38


相关文章:
SQLite3 C/C++ 开发接口简介(API函数) 二
SQLite3 使用教学
Scaling out MySQL - Hardware today and tomorro
SQLite适用的范围
sybase cursor declare
SQL语句大全精要
用户配额
decode函数
Oracle 数据库创建表空间、创建用户指定表空间
MySQL教会我使用GnuPG验证软件包
MySQL中MyISAM引擎与InnoDB引擎性能简单测试
initdb
mysqladmin在线帮助文档
CentOS 4.7 安装Oracle 9.2.0.4的一些问题
文本如何导入oracle(sqlldr 的用法)
ORA-00600: 内部错误代码,自变量: [16201], [],
分布式Oracle的database link
install a MySQL source distribution
Mysql备份脚本(未验证)
oracle 9.2.0.1 update 9.2.0.5
每小时Dump所有mysql数据库到NAS存储设备上
Oracle SCN机制解析
Account LOCKED(TIMED)
MySQL数据库5.0的my.cnf配置选项
oracle存储过程中调用其他用户的表
修改sqlplus提示符
MYSQL建表实例
一些对Mysql DBA有用的脚本
Oracle DBA 强悍挑战OS 64位 Solaris 10-真正休
[Bugzilla]由Mysql迁移到Oracle的方法