一个案例说清Group和Having

 

Group和Having是很多面试官喜欢问的,下面通过一个小案例解释一下。

1.数据准备

数据准备如下:

数据准备SQL

drop table Student;

create table Student(ClassId int,StuId int ,StuName varchar(10),Chinese int,Math int);

insert into Student values(1,11,'张三',30,90);

insert into Student values(1,12,'李四',40,100);

insert into Student values(1,13,'王五',50,80);

insert into Student values(2,21,'赵六',80,20);

insert into Student values(2,22,'狗蛋',90,65);

insert into Student values(2,23,'翠花',90,50);

insert into Student values(3,31,'小美',20,50);

insert into Student values(3,32,'小丽',80,60);

insert into Student values(3,33,'小静',30,40);

commit;

2.需求

求语文平均分大于80的班级中,最高的数学成绩和ClassID

select s.ClassId,max(s.Math) a

from Student s

group by s.ClassId

having avg(s.Chinese) >80;

案例十分简单,我们简要分析。

第一个要求是语文平均分大于80的班级,对聚合后的结果进行过滤,我们首先想到用Group by和Having过滤,因为having就是对聚合后的结果集进行过滤,

第二个需求是求满足第一个需求的最高数学成绩和ClassID,分组的条件没变,可以在第一步过滤出来的结果集上进行聚合运算。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值