练习:行转列

该博客主要介绍了如何使用SQL查询语句从学生考试成绩表中找出每位学生的每门课程成绩均大于80分的情况。通过分析数据来源、条件和查询方法,博主展示了如何进行分组查询并利用HAVING子句和聚合函数实现这一目标。此外,还探讨了将数据进行行转列的可能性。
摘要由CSDN通过智能技术生成


  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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值