id name course score
1 张三 语文 81
2 张三 数学 75
3 李四 语文 81
4 李四 数学 90
5 王五 语文 81
6 王五 数学 100
7 王五 英语 90
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(8,'李四','英语',90);
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;
--使用一条sql语句,查询每门课都大于80分的学生姓名
select * from tb_student;
--分析:
--数据: 学生姓名
--来源: tb_student
--条件: 1)有几门可就考了几门课 2)没门课程分数>80 以人名为单位,每组的最小分数>80
--一共存在几门课程
select count(distinct course) from tb_student;
select name
from tb_student
group by name
having min(score) > 80 and count(1) = (select count(distinct course)
from tb_student);
--行转列 -->分组,判定函数
/*select name,
decode(course, '语文', score) 语文,
decode(course, '数学', score) 数学,
decode(course, '英语', score) 英语
from tb_student;
*/
select name,
max(decode(course, '语文', score)) 语文,
min(decode(course, '数学', score)) 数学,
min(decode(course, '英语', score)) 英语
from tb_student group by name;