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分,被过滤掉了。

语法执行顺序:

  1. from student;先知道从哪个表查内容
  2. group by ... 以什么分组,找到分组的标准
  3. having ... 分组后的内容以什么条件过滤
  4. select ... 从符合条件的分组里面拿哪些内容

过滤行记录和组信息

行记录的过滤是针对每条记录的筛选,组信息的过滤是针对组的筛选,是可以同时出现的,先筛选行信息,再过滤组信息。

  1. where 筛选行,只能出现行信息
  2. having 过滤组,只能出现组信息

结构:select ... from ... where ... group by ... having ...
执行顺序:

  1. from ...
  2. where ...
  3. group by ...
  4. having ...
  5. 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个学生。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谦谦均

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值