1、
insert into 学生 values('1001','刘德华','男',40,'计算机')
insert into 学生 values('1002','周杰伦','男',30,'中文')
insert into 学生 values('1003','章子怡','女',28,'数学')
insert into 学生 values('1004','林心如','女',25,'中文')
insert into 课程 values(1,'数据库',4)
insert into 课程 values(2,'数学',5)
insert into 课程 values(3,'古汉语',3)
insert into 选修 values('1001',1,92)
insert into 选修 values('1002',3,80)
2、
group by与having连用, having子句将对group by子句选择出来的结果进行再次筛选,最后输出符合having子句中条件的记录。如果having子句中包含多个条件,那么这些条件将通过逻辑运算符(and、or或not)组合在一起。
having子句的语法与where子句的语法类似,唯一不同的是having子句中可以包含聚合函数,而且having子句只能引用选择列表中出现的字段.
先查每个学号下学生的平均成绩:
select k.学号,AVG(k.成绩)as 平均成绩 from XX k group by k.学号
例子:查找平均成绩在85分以上的学生的学号和平均成绩:
select k.学号,AVG(k.成绩)as 平均成绩 from XX k group by k.学号
having AVG(k.成绩)>85
【例】查找中文专业平均成绩在90分以上的学生的学号和平均成绩
select xs.学号, avg(成绩) as 平均成绩 from xk inner join xs on xk.学号=xs.学号 where 所在系='中文' group by xs.学号 having avg(成绩)<90
注意:
1、在having子句中,可以引用任何出现在查询列表中的字段。
2、只能在group by中使用having子句。
2、GROUP BY.....Having
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
select count(p.TestType) as 'count',p.TestType from dbo.LbtProjectInfo p group by p.TestType having p.TestType=2