版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/debimeng/article/details/87924542
SQL题:
求所有数学课程成绩大于语文课程成绩的学生学号
数据如下:
1,1,语文,73
2,1,数学,55
3,2,语文,77
4,2,数学,88
5,3,语文,98
6,3,数学,65
7,4,语文,78
8,4,数学,69
数据说明:
1,1,语文,43数据格式分别为id、学号、课程、成绩
解答:
数学成绩
大于
语文成绩
数据库版本:Oracle 11g
--创建表
create table t_course(
id int
, sid int
, course varchar2(10)
, score int);
--插入数据
insert into t_course values(1,1,'语文',73);
insert into t_course values(2,1,'数学',55);
insert into t_course values(3,2,'语文',77);
insert into t_course values(4,2,'数学',88);
insert into t_course values(5,3,'语文',98);
insert into t_course values(6,3,'数学',65);
insert into t_course values(7,4,'语文',78);
insert into t_course values(8,4,'数学',69);
commit;
--1.创建第一个临时表,将语文和数学的成绩分开两列
--先创建表
create table t_course_new
as
select sid
,course
,case course when '语文' then score else 0 end as yuwen
,case course when '数学' then score else 0 end as shuxue
from t_course
where 1=2;
--再插入数据
insert into t_course_new
select sid
,course
,case course when '语文' then score else 0 end as yuwen
,case course when '数学' then score else 0 end as shuxue
from t_course
where 1=1;
commit;
--查询数据
select * from t_course_new;
SID COURSE YUWEN SHUXUE
1 语文 73 0
1 数学 0 55
2 语文 77 0
2 数学 0 88
3 语文 98 0
3 数学 0 65
4 语文 78 0
4 数学 0 69
--2.再创建一个临时表,提取语文和数学的成绩实现一个sid一列有语文和数学的成绩
--创建表
create table t_course_two
as
select sid
,max(yuwen) as yuwen
,max(shuxue) as shuxue
from t_course_new
where 1=2
group by sid;
--插入数据
insert into t_course_two
select sid
,max(yuwen) as yuwen
,max(shuxue) as shuxue
from t_course_new
where 1=1
group by sid
order by sid;
--提交
commit;
--查询数据
select * from t_course_two;
SID YUWEN SHUXUE
1 73 55
2 77 88
3 98 65
4 78 69
--3.统计数学成绩大于语文成绩的学生学号
select sid
from t_course_two
where shuxue > yuwen;
SID
2