oracle数据库:having 过滤组信息
Posted 谦谦均
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库:having 过滤组信息相关的知识,希望对你有一定的参考价值。
在获取组信息的时候,如果需要满足一定的条件时,可以使用having来过滤组的条件。
结构:
select ... from ... where ... group by ...having...
这里以下面的表为例子:
这里还是以性别为分组标准,但是要加上一个条件,平均分大于90的才显示出来【这是对分组后的结果加上一个条件】。
select sex,avg(english) as english from student group by sex having avg(english)>=90;
来看看结果:
因为男生的平均分小于90分,被过滤掉了。
语法执行顺序:
from student;
先知道从哪个表查内容group by ...
以什么分组,找到分组的标准having ...
分组后的内容以什么条件过滤select ...
从符合条件的分组里面拿哪些内容
过滤行记录和组信息
行记录的过滤是针对每条记录的筛选,组信息的过滤是针对组的筛选,是可以同时出现的,先筛选行信息,再过滤组信息。
where
筛选行,只能出现行信息having
过滤组,只能出现组信息
结构:select ... from ... where ... group by ... having ...
执行顺序:
from ...
where ...
group by ...
having ...
select ...
这里还是以之前的student
表来进行试验,不过这里往里面添加几条数据,方便操作。
insert into student values(7,'小红','女',19,86,70);
insert into student values(8,'小兰','女',18,77,66);
insert into student values(9,'小艳','女',17,69,58);
insert into student values(10,'热巴','女',22,83,84);
insert into student values(11,'赵丽颖','女',21,99,98);
insert into student values(12,'鞠婧祎','女',24,62,76);
添加之后查看表里面所有数据如下图:
这里来做一个例子:
- 查询学生年龄段和该年龄段里面学生的数量
- 行记录条件:只统计数学成绩大于60分的学生 【
where
】 - 分组条件:只记录年龄段里面有2个及以上学生的分组 【
having
】
来看看具体实现:
select age,count(age) from student where math>=60 group by age having count(age)>=2;
执行一下看看结果:
符合条件的只有18岁的4个学生。
以上是关于oracle数据库:having 过滤组信息的主要内容,如果未能解决你的问题,请参考以下文章