HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
SELECT 字段表
FROM 表
[WHERE选择准则]
GROUP BY 分组字段表
[HAVING分组准则]
说明
HAVING 是可选的。
HAVING 与 WHERE 类似,可用来决定选择哪个记录。在使用 GROUP BY对这些记录分组后,HAVING 会决定应显示的记录,不同的是where对分组前的结果集条件过滤,而having对分组后的结果集过滤;having何以跟聚合函数,而where则不能。
以下从建立实例来理解
------------------------------------------
--建立测试环境
Create Table TEST
(类别 Varchar(10),
产品 Varchar(10),
数量 Int)
--插入数据
Insert into TEST Values('A','A01',10);
Insert into TEST Values('A','A02',13);
Insert into TEST Values('A','A03',12);
Insert into TEST Values('A','A05',15);
Insert into TEST Values('A','A06',11);
Insert into TEST Values('A','A06',12);
Insert into TEST Values('B','B01',20);
Insert into TEST Values('B','B02',10);
Insert into TEST Values('B','B03',17);
--测试
-----1,选择类别与产品都相同的记录
select 类别,产品 from test a group by 类别,产品 having count(*)>1
---返回结果 类别 产品 A A06
-----2,选择所有记录数量大于15的记录
select 类别,产品,数量 from test a group by 类别,产品,数量 having 数量> 15
---返回结果类别 产品 数量 B B01 20 B B03 17
------3,选择类别为A的记录中数量大于12的记录
select 类别,产品,数量 from test a where 类别='A' group by 类别,产品,数量 having 数量> 12
---返回结果类别 产品 数量 A A02 13 A A05 15
------4,选择数量平均数大于13的记录 select 类别,产品,avg(数量) 平均数 from test a group by 类别,产品 having avg(数量)>13
---返回结果类别 产品 平均数 A A05 15 B B01 20 B B03 17
--删除测试环境
Drop Table TEST
分享到:
相关推荐
--------------------------------------------------having函数对于group by函数的过滤 不能用where-------------------------------------- 58、select deptno, avg(sal) from emp group by deptno having avg...
SQL> select xm from table1 where soundex(xm)=soundex('weather'); XM -------- weather wether 14.TRIM('s' from 'string') LEADING 剪掉前面的字符 TRAILING 剪掉后面的字符 如果不指定,默认为空格符 15.ABS ...
SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from ....
2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;6、计算所有的表达式;7、使用order by对结果集进行排序。oracle 语句...
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...
//(条件过滤查询) 11、select * from emp where empno > 10; //大于 过滤判断 12、select * from emp where empno <> 10 //不等于 过滤判断 13、select * from emp where ename > 'cba'; //字符串比较,实际上...
10.4 在SELECT语句中应用条件表达式 368 10.4.1 嵌套函数 368 10.4.2 条件函数 369 10.5 本章知识点回顾 375 10.6 自测题 376 10.7 自测题答案 378 第11章 分组函数 379 11.1 分组函数 380 11.1.1 分组函数...
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
5.Where子句可以接收From子句输出的数据,而HAVING子句则可以接收来自WHERE、FROM或GROUP BY子句的输入。 6.在SQL语句中,用于向表中插入数据的语句是Insert。 7.如果需要向表中插入一批已经存在的数据,可以在...
在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席COLLABORATE、OraclecOpenWorld和区域性用户组会议. Michael J.Corey是Ntirety...
使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束...
如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的性能,因为在GROUP之前已经过滤掉数据,因此更少的行被汇总 3.UNION会对两个SELECT语句的结果集执行一个SORT,并消除重复行,成本会...
SQL>select * from dictionary where instr(comments,'index')>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL>select column_name,comments from dict_columns where ...
《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究...
group by S# having count(*)=(select count(*) from SC where S#='1002'); 15、--删除学习“叶平”老师课的SC表记录; Delect SC from course ,Teacher where Course.C#=SC.C# and Course.T#= Teacher.T# ...
对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。 Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面 3.索引方面 记录数少的表保留有主键索引就可以了,...
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1...