晕了, 简单的SQL题
SNO CNO DEGREE
---- ----- ---------------------------------------
103 3-245 86.0
105 3-245 75.0
109 3-245 68.0
103 3-105 92.0
105 3-105 88.0
109 3-105 76.0
101 3-105 64.0
107 3-105 91.0
108 3-105 78.0
101 6-166 85.0
107 6-166 79.0
108 6-166 80.0
105 6-166 82.0
(13 行受影响)
SNO --成绩ID
CNO --课程编号
DEGREE --分数
--33、查询成绩比该课程平均成绩低的同学的成绩表。
--34查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
--35查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,
------解决方案--------------------create table tab(sno int,cno varchar(20),degree float)
insert into tab select 103, '3-245 ',86
union
select 105, '3-245 ',75
select * from tab t1 where degree <(select avg(degree) from tab t2 where t2.cno=t1.cno)
-------------------
105 3-245 75.0
------解决方案--------------------create table tab1(SNO int, CNO varchar(20), DEGREE dec(15,1))
insert tab1 select 103, '3-245 ', 86.0
union all select 105, '3-245 ', 75.0
union all select 109, '3-245 ', 68.0
union all select 103, '3-105 ', 92.0
union all select 105, '3-105 ', 88.0
union all select 109, '3-105 ', 76.0
union all select 101, '3-105 ', 64.0
union all select 107, '3-105 ', 91.0
union all select 108, '3-105 ', 78.0
union all select 101, '6-166 ', 85.0
union all select 107, '6-166 ', 79.0
union all select 108, '6-166 ', 80.0
union all select 105, '6-166 ', 82.0
--33、查询成绩比该课程平均成绩低的同学的成绩表。
select * from
tab1 a
left join
(select CNO,sum(DEGREE)/count(1)de from tab1 group by CNO)b
on b.cno=a.cno
where b.de> a.degree