ORACLE 6

create table tb_student(
id number(4) ,
name varchar2(20),
course varchar2(20),
score number(5,2)
);
insert into tb_student values(1,'张三','语文',81);
insert into tb_student values(2,'张三','数学',75);
insert into tb_student values(3,'李四','语文',81);
insert into tb_student values(4,'李四','数学',90);
insert into tb_student values(5,'王五','语文',81);
insert into tb_student values(6,'王五','数学',100);
insert into tb_student values(7,'王五','英语',90);
commit;
drop table tb_student cascade constraints;

select * from tb_student;

-- 使用一条 sql 语句,查询每门课都大于 80 分的学生姓名
--查询的数据:name
--来源:tb_student
--条件: 每门课都大于 80 (分数的最小值)>80 and 课程数=总共的课程数量

--总共的课程数
select count(distinct course) from tb_student;
--每个人的最小分数
select min(score),name from tb_student group by name;

select name
  from tb_student
 group by name
having min(score) > 80 and count(1) = (select count(distinct course)
                                         from tb_student);
                                         
                                         
--行转列
select name,
       min(decode(course, '语文', score)) "语文",
       avg(decode(course, '数学', score)) "数学",
       nvl(max(decode(course, '英语', score)),0) "英语"
  from tb_student
 group by name;

猜你喜欢

转载自blog.csdn.net/digua930126/article/details/92796289